版权声明:本文为博主原创文章,欢迎交流分享,未经博主允许不得转载。 https://blog.csdn.net/qjf42/article/details/82222507
what
特征归一化/标准化(feature scaling/standardization/normalization)
是一种把特征变量映射到某个区间的数据前处理方法
- 因为不同特征的取值范围,单位、量纲各不相同(如,身高可用m或cm),对某些模型来说,可能对结果有影响
- 这些词是一类操作,可能稍有不同,这里先不做区分
how
基本方法
常见的就两种方法(本质上都是压缩平移):
Min-Max
通常是将特征映射到
或
- 需要注意的是:对测试集做标准化时, 仍然用的是训练集中的值,所以结果可能超出范围
(均值/方差)标准化
把样本的均值和标准差变为0, 1
- 标准化后的数据的均值,标准差正好是(0,1),但是范围不固定
- 如果特征原本服从正态分布的话,那么标准化之后是标准正分布
注意点
- 这里讨论的是对于单变量的处理,区别于
whitening
(多变量版本,但是还要考虑协方差,消除变量相关性) - 在数据的分布比较合理的情况下,这么做是ok的, 但是如果数据包含outlier,如:分布是厚尾的,或数据本身有问题,则均值和方差都会受很大的影响
- 例:
min-max:
(均值/方差)标准化:
可以看到,0,1因为受到outlier 100的影响,在标准化后变得更难区分了 - 解决这类的第一种方法是挖掘数据中的outlier,手动处理
- 一种鲁棒性更好的方法是用中位数代替均值,用四分位距(IQR)代替标准差,即:
- 注意,这是在通过数据难以准确估计其分布参数的情况下采用的办法,所以如果数据分布不是对称的,样本中位数不是均值的无偏估计;四分位距也不同于标准差(实际上,对于正态分布, 内的面积是0.68,非0.5, ,而厚尾的情况下, );因此,标准化后的数据均值和方差并非(0,1)
- 例:
- 当需要计算cosine距离时,通常还有另一种标准化(其实是
单位化
),即:
when
什么时候需要做标准化?
- 模型是否是基于距离或距离敏感的?
- 举个例子,两个特征,分别是身高(单位: 米)和体重(单位: 克),显然后者比前者大好几个数量级,如果直接基于欧式距离聚类,那么后者的作用会远大于前者
- 所以像KNN,聚类,核方法(如svm中用到的),这些直接基于距离的方法都需要做标准化
- 说到底,是因为无法权衡特征的重要性,所以就统统打平到一个范围处理(尤其对无监督的来说)
- PS: 一种自带标准化的距离:马氏距离
- 模型优化考虑
- 模型有正则化项(regularization/weight decay)时,显然取值范围大的特征权重容易小一些,这样正则化的约束力就会弱一些,反之也是,导致不平衡
- 梯度下降对是否标准化也较敏感,尤其是二阶导(Hessian matrix)比较ill-conditioned时(简单理解就是矩阵的最大和最小的特征值绝对值之比很大,导致用一阶导作为当前优化的方向是不合理的),可能出现步子太小走得慢,或步子大"在峡谷震荡"等导致收敛慢的情况
- 影响参数初始化的效果
- 如:采用均值为0的正态分布初始化参数时,如果不用中心为0的标准化(如 ),甚至二值化采用 而不是 ),都会导致初始化时分类平面偏离数据点(如: )
- 同时还会有saturation的问题,如sigmoid,tanh激活
反过来说,什么时候不需要?
- 不需要加正则化时的回归(linear,logistic等),除了可能影响优化时收敛的速度外,做不做标准化没影响
- tree-based model(如random forest,GBDT(penalty是加在输出上的,与输入无关)),在选特征和切分的时候,因为不考虑值的大小,所以也可以不用标准化