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

来源: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_)]
#但是对得到的系数进行排序后,却发现很大不同
#那我应该相信归一化处理的还是不进行归一化处理的结果呢?

//img.mukewang.com/szimg/5a7b0eee0001255906470419.jpg

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

写回答

2回答

liuyubobobo

2018-02-08

大赞!非常好的问题!


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


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


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

5
15
手中的铅笔
回复
liuyubobobo
老师,马上 2021 年了,机器学习的进阶课有计划吗:)
2020-09-16
共15条回复

liuyubobobo

2020-09-17

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


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


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


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


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


继续加油!:)

2
0

Python3入门机器学习 经典算法与应用  

Python3+sklearn,兼顾原理、算法底层实现和框架使用。

5850 学习 · 2437 问题

查看课程