归一化

一、数值类型特征常用归一化方法

1、线性函数归一化(Min-Max Scaling)

它对原始数据进行线性变换,使结果映射到[0, 1]的范围,实现对原始数据的等比缩放。
归一化公式如下,其中X为原始数据,X max 、X min 分别为数据最大值和最小值。

优点:通过利用变量取值的最大值和最小值将原始数据转换为界于某一特定范围的数据,从 而消除量纲和数量级的影响
缺点:由于极值化方法在对变量无量纲化过程中仅仅与该变量的最大值和最小值这两个极端 值有关,而与其他取值无关,这使得该方法在改变各变量权重时过分依赖两个极端取值。实际使用中可以用经验常量值来替代max和min。

2、零均值归一化(Z-Score Normalization)

它会将原始数据映射到均值为0、标准差为1的分布上。具体来说,假设原始特征的均值为μ、标准差为σ,那么
归一化公式定义为

优点:去量纲化。我的理解就是通过某种方法能去掉实际过程中的单位,从而简化计算。
缺点:这种归一化方式要求原始数据的分布可以近似为高斯分布,否则归一化的效果会变得很糟糕。


二、为什么需要对数值类型的特征做归一化?

两个原因:

  • 归一化后加快了梯度下降求最优解的速度
  • 归一化有可能提高精度。

如上图所示,蓝色的圈圈图代表的是两个特征的等高线。其中左图两个特征X1和X2的区间相差非常大,X1区间是[0,2000],X2区间是[1,5],其所形成的等高线非常尖。当使用梯度下降法寻求最优解时,很有可能走“之字型”路线(垂直等高线走),从而导致需要迭代很多次才能收敛;

而右图对两个原始特征进行了归一化,其对应的等高线显得很圆,在梯度下降进行求解时能较快的收敛(消除了量纲的影响)。

至于为什么能提高精度,比如一些分类器需要计算样本之间的距离(如欧氏距离),例如KNN。如果一个特征值域范围非常大,那么距离计算就主要取决于这个特征,从而与实际情况相悖(比如这时实际情况是值域范围小的特征更重要)。

值域范围大的特征将在cost函数中得到更大的加权(如果较高幅值的特征改变 1%,则该改变相当大,但是对于较小的特征,该改变相当小),数据归一化使所有特征的权重相等。


三、哪些机器学习算法不需要做归一化处理

概率模型不需要归一化,因为它们不关心变量的值,而是关心变量的分布和变量之间的条件概率,树形结构就属于概率模型,如决策树、rf。

而像adaboost、svm、lr、KNN、KMeans之类的最优化问题就需要归一化。

归一化和标准化主要是为了使计算更方便,加快求解最优解的速度。比如两个变量的量纲不同,可能一个的数值远大于另一个,那么他们同时作为变量的时候,可能会造成数值计算问题,比如说求矩阵的逆可能很不精确,或者梯度下降法的收敛比较困难,还有如果需要计算欧式距离的话可能,量纲也需要调整。


四、对于树形结构为什么不需要归一化

数值缩放,不影响分裂点位置。因为第一步都是按照特征值进行排序的,排序的顺序不变,那么所属的分支以及分裂点就不会有不同。

对于线性模型,比如说LR,我有两个特征,一个是(0,1)的,一个是(0,10000)的,这样运用梯度下降时候,损失等高线是一个椭圆的形状,这样我想迭代到最优点,就需要很多次迭代,但是如果进行了归一化,那么等高线就是圆形的,那么SGD就会往原点迭代,需要的迭代次数较少。

另外,注意树模型是不能进行梯度下降的,因为树模型是阶跃的,阶跃点是不可导的,并且求导没意义,所以树模型(回归树)寻找最优点事通过寻找最优分裂点完成的。


五、标准化与归一化的区别

简单来说,归一化是依照特征矩阵的行处理数据,其目的在于样本向量在点乘运算或其他核函数计算相似性时,拥有统一的标准,也就是说都转化为“单位向量”。

标准化是依照特征矩阵的列处理数据,其通过求z-score的方法,将样本的特征值转换到同一量纲下。