请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于线性回归中归一化处理和不对归一化处理的问题

import numpy as np
from sklearn.model_selection import GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn import datasets
boston = datasets.load_boston()
X = boston.data
y = boston.target
X = X[y<50]
y = y[y<50]
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 666)
scaler = StandardScaler()
scaler.fit(X_train)
X_train_standard = scaler.transform(X_train)
X_test_standard = scaler.transform(X_test)
linear_rgn1 = LinearRegression()
linear_rgn2 = LinearRegression()
linear_rgn1.fit(X_train, y_train)
linear_rgn2.fit(X_train_standard, y_train)
linear_rgn1.score(X_test, y_test)
linear_rgn2.score(X_test_standard, y_test)
#可以看到score是差不多的
##################################################
boston.feature_names[np.argsort(linear_rgn1.coef_)]
boston.feature_names[np.argsort(linear_rgn2.coef_)]
#但是对得到的系数进行排序后,却发现很大不同
#那我应该相信归一化处理的还是不进行归一化处理的结果呢?

//img1.sycdn.imooc.com//szimg/5a7b0eee0001255906470419.jpg

我记得老师好像在课程中说过,可以不进行归一化,因为得到的参数会有所调整,老师在课程中也没有进行归一化。那对于这个结果该如何解释呢?

正在回答

2回答

liuyubobobo 2018-02-08 07:38:29

大赞!非常好的问题!


现阶段,通常业界在具体应用机器学习算法的时候,不太关注可解释性。这在很大一部分,是因为现阶段真正效果好的算法,不具备可解释性,如深度学习。从这个意义上,使用线性回归进行预测,是不需要进行归一化标准化的处理的。


但是,另外,机器学习有一个很重要的应用,是数据分析。由于数据分析的目的,就是要得到可以被解释的结论,而不是预测新的房产的价格,所以做数据分析,更关注可解释性,而不是预测的准确度。作分析和做预测,看似都在使用机器学习算法,但二者其实有着巨大的本质不同,深入下去,二者在方法上,也会有巨大的不同。


言归正传,在你这个问题上,应该更相信“标准化”后的结果。原因很简单,因为他们把变量放在同一尺度下,用同一把尺子来衡量其中的重要程度。但是,真正做数据分析,还是要进一步使用各种统计学的方法来检验变量的重要程度。最一般的方法就是“假设检验”所涉及的各种方法。不过这已经在统计学的范畴了,不是这个课程的范围了:)

5 回复 有任何疑惑可以回复我~
  • 提问者 慕运维2948618 #1
    那么,如果归一化后的解释性比没归一化的要好,而且归一化和不归一化的预测准确程度一致的话,何尝不对数据归一化呢?
    回复 有任何疑惑可以回复我~ 2018-02-08 14:08:37
  • liuyubobobo 回复 提问者 慕运维2948618 #2
    依然是:对数据做归一化没有问题;但是如果我们只看重预测准确性,不看重解释性,线性回归前做归一化不是必需的。在这里,我只是摆出这种非必要性。但是在下一章,你就会看到,为了让梯度下降法训练的更快,进行标准化处理依然是好的。
    回复 有任何疑惑可以回复我~ 2018-02-08 14:21:53
  • 提问者 慕运维2948618 回复 liuyubobobo #3
    有没有归一化处理后反而更糟糕的情况出现呢?
    回复 有任何疑惑可以回复我~ 2018-02-08 15:10:34
liuyubobobo 2020-09-17 07:15:14

这个问题是一个统计学的问题了。


简单来说,做不做归一化,相当于特征的尺度不同,所以最终每个特征前的系数求解出来是不一样的。尺度大的特征,被分配到的系数就变小了;但如果归一化,尺度缩小了,相应的系数就会变大。


但是,因为我们只是是用直线做拟合,最终拟合的 MSE 肯定是一样的,表现出来就是 score 是一样的。


在这个课程中,我们主要关注机器学习。对于机器学习来说,主要关注预测的结果。但如果真的想认真研究各个特征的贡献度等因素,这本质其实是在做统计分析,里面还有很多问题需要注意。对数据做归一化就是其中的一点。


如果对此感兴趣,可以参考一下统计学中对线性回归的介绍。你会发现,和机器学习中对线性回归的介绍,侧重点完全不同。


继续加油!:)

2 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信