关于线性回归中归一化处理和不对归一化处理的问题
来源:5-10 线性回归的可解释性和更多思考
慕运维2948618
2018-02-07
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_)] #但是对得到的系数进行排序后,却发现很大不同 #那我应该相信归一化处理的还是不进行归一化处理的结果呢?
我记得老师好像在课程中说过,可以不进行归一化,因为得到的参数会有所调整,老师在课程中也没有进行归一化。那对于这个结果该如何解释呢?
2回答
-
大赞!非常好的问题!
现阶段,通常业界在具体应用机器学习算法的时候,不太关注可解释性。这在很大一部分,是因为现阶段真正效果好的算法,不具备可解释性,如深度学习。从这个意义上,使用线性回归进行预测,是不需要进行归一化标准化的处理的。
但是,另外,机器学习有一个很重要的应用,是数据分析。由于数据分析的目的,就是要得到可以被解释的结论,而不是预测新的房产的价格,所以做数据分析,更关注可解释性,而不是预测的准确度。作分析和做预测,看似都在使用机器学习算法,但二者其实有着巨大的本质不同,深入下去,二者在方法上,也会有巨大的不同。
言归正传,在你这个问题上,应该更相信“标准化”后的结果。原因很简单,因为他们把变量放在同一尺度下,用同一把尺子来衡量其中的重要程度。但是,真正做数据分析,还是要进一步使用各种统计学的方法来检验变量的重要程度。最一般的方法就是“假设检验”所涉及的各种方法。不过这已经在统计学的范畴了,不是这个课程的范围了:)
5152020-09-16 -
liuyubobobo
2020-09-17
这个问题是一个统计学的问题了。
简单来说,做不做归一化,相当于特征的尺度不同,所以最终每个特征前的系数求解出来是不一样的。尺度大的特征,被分配到的系数就变小了;但如果归一化,尺度缩小了,相应的系数就会变大。
但是,因为我们只是是用直线做拟合,最终拟合的 MSE 肯定是一样的,表现出来就是 score 是一样的。
在这个课程中,我们主要关注机器学习。对于机器学习来说,主要关注预测的结果。但如果真的想认真研究各个特征的贡献度等因素,这本质其实是在做统计分析,里面还有很多问题需要注意。对数据做归一化就是其中的一点。
如果对此感兴趣,可以参考一下统计学中对线性回归的介绍。你会发现,和机器学习中对线性回归的介绍,侧重点完全不同。
继续加油!:)
20
相似问题