标准化与最大最小归一化
1.介绍
在时间序列预测中,经常要做数据的归一化,防止梯度下降时走之字形路线以加快收敛,梯度爆炸等问题。
2.实现
def standard_scaler(data,mean,std):
return (data-mean)/std
def minmax_scaler(data,min,max):
return (data-min)/(max-min)
3.异同点
同:对数据进行缩放,中心化
异:压缩后的均值不同。
从2可以看出,min,max会决定最大最小归一化后的数值大小, 最大最小归一化对异常值敏感,有较大的异常值,则原来较小的值会被压得很密,不便于区分特征,最大最小归一化后值的范围为[0,1];
标准化对异常值整体不敏感,受影响程度取决于数据集的大小和异常值的数量;标准化后的值范围[a,b],其中a可能小于0, b-a可能大于1, 标准化后的范围取决于特征数值的均值,以及特征数值的波动情况,即标准差。
4.例子
(1)原始数据,范围为[0,205]
(2)插入异常值
向数据中的14和18这两个点插入个两个异常值1050和1000;最大最小归一化的范围为[0,1]; 标准化的最小值小于0;
看不出来啥区别
(3)极端异常值
我们再向数据中x=14和x=28加入两个极端的极大值,分别是10500和10000,并把最大最小归一化和标准化后的数值都放置[-1,1]的范围下观察。
可以发现,在极端极大值情况下,最大最小化的值以及被压缩的很密,而标准化对原始距离做了缩放,保留了数据间数值的差异。
5.结论
(1)是否需要归一化
KNN,SVM,LR,GBDT等基于距离的要做归一化;决策树、贝叶斯,XGBoost, RF等与特征数值范围无关的模型不用做归一化;
(2)什么时候用标准化?什么时候用最大最小归一化?
一般优先标准化,数据中有异常值用标准化;数值波动情况不大的情况可以用最大最小归一化,对输出值范围有要求的用最大最小归一化。