feature scaling小结

Posted bitcarmanlee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了feature scaling小结相关的知识,希望对你有一定的参考价值。

原文链接:https://blog.csdn.net/blogshinelee/article/details/102875044

1 前言

在对特征进行预处理的时候,很重要的一步就是feature scaling,中文经常翻译成归一化(scale), 标准化(normalization),等等不同的说法。
为什么要进行归一化?最主要的原因有两点:
1.不同特征之间的尺度不一样,那么在计算距离的时候,如果不对原始特征进行处理,某一维尺度特别大的特征会占主导,别的尺度小的特征基本体现不出来。

2.不同特征之间的尺度不一样,loss function的等高线图有可能为椭圆形。而梯度的方向垂直与等高线,梯度下降的时候会走zigzag行路线,而不指向局部最小值的方向,这样会造成收敛速度慢甚至不收敛。

2 常见的feature scaling方法

1.Rescaling
将某一为特征线性映射到目标范围[a,b],即最小值对应a,最大值对应为b。
x ′ = a + ( x − x m i n ) ( b − a ) x m a x − x m i n x' = a + \\frac{(x - x_{min})(b-a)}{x_{max} - x_{min}} x=a+xmaxxmin(xxmin)(ba)

我们最常用的为归一化,即将特征映射到[0,1]区间
x ′ = x − x m i n x m a x − x m i n x' = \\frac{x-x_{min}}{x_{max} - x_{min}} x=xmaxxminxxmin

  1. 均值化(Mean normalization)
    x ′ = x − x ‾ x m a x − x m i n x' = \\frac{x- \\overline x}{x_{max} - x_{min}} x=xmaxxminxx
    上面的公式,将均值映射为0,同时用最大最小值差进行归一化。

3.标注化(Standardization)
x ′ = x − x ‾ σ x' = \\frac{x- \\overline x}{\\sigma} x=σxx
与均值化的区别在于,将分母变成了标准差。

4.Scaling to unit length
x ′ = x ∣ ∣ x ∣ ∣ x' = \\frac{x}{||x||} x=xx

将每个样本的特征向量除以其长度,即对样本特征向量的长度进行归一化,长度的度量常使用的是L2 norm,有时也会采用L1 norm。

3.计算方式的比较

前3种feature scaling的计算方式为减一个统计量再除以一个统计量,最后1种为除以向量自身的长度。

1.减一个统计量可以看成选哪个值作为原点,是最小值还是均值,并将整个数据集平移到这个新的原点位置。如果特征间偏置不同对后续过程有负面影响,则该操作是有益的,可以看成是某种偏置无关操作;如果原始特征值有特殊意义,比如稀疏性,该操作可能会破坏其稀疏性。

2.除以一个统计量可以看成在坐标轴方向上对特征进行缩放,用于降低特征尺度的影响,可以看成是某种尺度无关操作。缩放可以使用最大值最小值间的跨度,也可以使用标准差(到中心点的平均距离),前者对outliers敏感,outliers对后者影响与outliers数量和数据集大小有关,outliers越少数据集越大影响越小。

3.除以长度相当于把长度归一化,把所有样本映射到单位球上,可以看成是某种长度无关操作,比如,词频特征要移除文章长度的影响,图像处理中某些特征要移除光照强度的影响,以及方便计算余弦距离或内积相似度等。

总的来说,归一化/标准化的目的是为了获得某种“无关性”——偏置无关、尺度无关、长度无关……当归一化/标准化方法背后的物理意义和几何含义与当前问题的需要相契合时,其对解决该问题就有正向作用,反之,就会起反作用。所以,“何时选择何种方法”取决于待解决的问题,即problem-dependent。

4.feature scaling 需要还是不需要

什么时候需要feature scaling?

涉及或隐含距离计算的算法,比如K-means、KNN、PCA、SVM等,一般需要feature scaling,因为:

zero-mean一般可以增加样本间余弦距离或者内积结果的差异,区分力更强,假设数据集集中分布在第一象限遥远的右上角,将其平移到原点处,可以想象样本间余弦距离的差异被放大了。在模版匹配中,zero-mean可以明显提高响应结果的区分度。

就欧式距离而言,增大某个特征的尺度,相当于增加了其在距离计算中的权重,如果有明确的先验知识表明某个特征很重要,那么适当增加其权重可能有正向效果,但如果没有这样的先验,或者目的就是想知道哪些特征更重要,那么就需要先feature scaling,对各维特征等而视之。

损失函数中含有正则项时,一般需要feature scaling:对于线性模型y=wx+b而言,x的任何线性变换(平移、放缩),都可以被w和b“吸收”掉,理论上,不会影响模型的拟合能力。但是,如果损失函数中含有正则项,如λ∣∣w∣∣^2,λ为超参数,其对w的每一个参数施加同样的惩罚,但对于某一维特征xi而言,其scale越大,系数wi越小,其在正则项中的比重就会变小,相当于对wi惩罚变小,即损失函数会相对忽视那些scale增大的特征,这并不合理,所以需要feature scaling,使损失函数平等看待每一维特征。

梯度下降算法,需要feature scaling

对于传统的神经网络,对输入做feature scaling也很重要,因为采用sigmoid等有饱和区的激活函数,如果输入分布范围很广,参数初始化时没有适配好,很容易直接陷入饱和区,导致梯度消失,所以,需要对输入做Standardization或映射到[0,1]、[−1,1],配合精心设计的参数初始化方法,对值域进行控制。但自从有了Batch Normalization,每次线性变换改变特征分布后,都会重新进行Normalization,似乎可以不太需要对网络的输入进行feature scaling了?但习惯上还是会做feature scaling。

什么时候不需要Feature Scaling?

与距离计算无关的概率模型,不需要feature scaling,比如Naive Bayes;

与距离计算无关的基于树的模型,不需要feature scaling,比如决策树、随机森林等,树中节点的选择只关注当前特征在哪里切分对分类更好,即只在意特征内部的相对大小,而与特征间的相对大小无关。

以上是关于feature scaling小结的主要内容,如果未能解决你的问题,请参考以下文章

机器学习中的特征缩放(feature scaling)

线性回归与特征归一化(feature scaling)

尺度不变特征变换(Scale-invariant feature transform,SIFT)

第四十九篇 入门机器学习——数据归一化(Feature Scaling)

机器学习中(Feature Scaling)特征缩放处理的matlab实现方式

卷积骚操作-PSConv:Squeezing Feature Pyramid into One Compact Poly-Scale Convolutional Layer