很多人在建模前看到一组变量,都会有这样的一个问题,这些变量需要标准化吗?然后转身问了下身边的同事,教授.哦!原来要做标准化的,接着把所有变量转化成平均数为 0,标准差为 1 的变量,开开心心地开始建模了.
多数人觉得标准化变量是建模的固定步骤,其实他们也不清楚标准化的作用到底是什么,他们认为做总是比没做好.那么标准化究竟解决了什么,如果不做的话,会产生怎么样的结果呢?今天我们一步一步的来详细讨论一下这个问题吧.
01 我们来举个回归的例子
我们先从简单的预测房价的线性回归模型开始:
有一组关于房价和房子变量的数据集,通过房子的面积,房间数量,房子的层数来预测房价.
占地面积 1800 尺,房间数量 3 间,房子层数 2 层 -> 房价 $$?;
为了方便对比,我们分别看一下标准化前和标准化后的模型输出分布是怎么样的.
可以看出,标准化前后变量的系数不同,误差不同,但是 R 平方,和变量的 t 值是相同的.
001 解释有区别吗?
那标准化前后得到的公式,怎么来解释呢?
标准化前 | 标准化后 |
---|---|
如果居住面积,房间数,房间层数都是 0 的情况下,房子的价格为 91830 万 | 如果居住面积,房间数,房间层数是各自的平均数的情况下,房子的价格为 539400 万 |
当一个外行人在听解释的时候,一定会问,什么呀?所有东西都是 0,空气造的房子还能卖 9 万?!
接着你会问,系数不同,那预测出来的房价会相同吗?
002 预测值有区别吗?
现在我们来预测一个 1590 尺,3 个卧室,3 层的房屋
标准化前房价 | 标准化后房价 |
---|---|
$406641.02 | $406641.02 |
我们发现预测出来的房价是一样的.
这时你一定会想,既然结果都一样,做不做标准化,都一样嘛.说到这里,我们再看一下,建模时寻找最优解的时间吧.
003 花费时间有区别吗?
标准化前处理时间 | 标准化后处理时间 |
---|---|
0.026s | 0.021s |
为什么标准化后的建模时间会短呢?这时候就要说起寻找系数最优解-梯度下降法.
标准化前,由于变量的单位相差很大,导致了椭圆型的梯度轮廓.标准化后,把变量变成统一单位,产生了圆形轮廓.由于梯度下降是按切线方向下降,所以导致了系统在椭圆轮廓不停迂回地寻找最优解,而圆形轮廓就能轻松找到了.
还有一种比较极端的情况,有时没做标准化,模型始终找不到最优解,一直不收敛.
02 PCA,Kmeans,KNN 需要标准化数据吗?
这种情况下,可见标准化的重要性了吧.
我们再来看一下,如果将预测房价的变量,用 PCA 方法来降维,会不会对结果产生影响.
我们看出在标准化前,用一个成分就能解释 99% 的变量变化,而标准化后一个成分解释了 75% 的变化. 主要原因就是在没有标准化的情况下,我们给了居住面积过大权重,造成了这个结果.
那还有什么情况下,不做归一化会发生这么大的影响?
Kmeans,KNN 一些涉及到距离有关的算法,或者聚类的话,都是需要先做变量标准化的.
举个例子,我们将 3 个城市分成两类,变量有面积和教育程度占比;三个城市分别是这样的:
城市 A,面积挺大,但是整天发生偷盗抢劫,教育程度低;
城市 B,面积也挺大,治安不错,教育程度高;
城市 C,面积中等,治安也挺好,教育程度也挺高;
我们如果不做标准化,直接做聚类模型的话,A 城市和 B 城市分在一块儿了,你想想,一个治安挺好的城市和一个整体偷盗抢劫城市分在一起,实在是有点违反常理.
03 总结
当然,也不是所有的模型都需要做归一的,比如模型算法里面有没关于对距离的衡量,没有关于对变量间标准差的衡量.比如 decision tree 决策树,他采用算法里面没有涉及到任何和距离等有关的,所以在做决策树模型时,通常是不需要将变量做标准化的.
来源: http://www.jianshu.com/p/1e63cd2afedc