机器学习-特征工程-归一化

机器学习-特征工程-归一化

转载声明

本文大量内容系转载自以下文章,有删改,并参考其他文档资料加入了一些内容:

转载仅为方便学习查看,一切权利属于原作者,本人只是做了整理和排版,如果带来不便请联系我删除。

摘要

本文简要介绍归一化和标准化

0x01 归一化

1.1 范围归一化简介

在喂给机器学习模型的数据中,对数据要进行归一化的处理。常用的范围归一化就是将样本数据按以下公式缩放:
机器学习-特征工程-归一化
从经验上说,归一化就是让不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性。

总的来说,归一化的目标如下:

  1. 把数据变=转为为(0,1)之间的小数
    主要是为了数据处理方便提出来的,把数据映射到0~1范围之内处理,更加便捷快速,应该归到数字信号处理范畴之内。
  2. 把有量纲表达式变为无量纲表达式
    归一化是一种简化计算的方式,即将有量纲的表达式,经过变换,化为无量纲的表达式,成为纯量。

1.2 例子

假定为预测房价的例子,自变量为面积,房间数两个,因变量为房价。

那么可以得到的公式为:

机器学习-特征工程-归一化
其中

  • x1代表房间数,theta1代表x1 变量前面的系数。
  • x2代表面积,theta2代表x2 变量前面的系数。

首先我们祭出两张图代表数据是否均一化的最优解寻解过程。

未归一化:
机器学习-特征工程-归一化
归一化之后
机器学习-特征工程-归一化

  • 为什么会出现上述两个图,并且它们分别代表什么意思?
    我们在寻找最优解的过程也就是在使得损失函数值最小的theta1,theta2。

    上述两幅图的圆环代表的是损失函数的等高线。

    我们很容易看出,当数据没有归一化的时候,面积数的范围可以从0-1000,房间数的范围一般为0-10,可以看出面积数的取值范围远大于房间数。

  • 影响
    这样造成的影响就是在画损失函数的时候,数据没有归一化的表达式,可以为:

机器学习-特征工程-归一化
造成图像的等高线为类似椭圆形状,最优解的寻优过程就是像下图所示:
机器学习-特征工程-归一化

  • 而数据归一化之后,损失函数的表达式可以表示为:
    机器学习-特征工程-归一化
    其中变量的前面系数几乎一样,则损失函数图像的等高线为类似圆形形状,最优解的寻优过程像下图所示:
    机器学习-特征工程-归一化

从上可以看出,数据归一化后,最优解的寻优过程明显会变得平缓,更容易正确的收敛到最优解。

这也是数据为什么要归一化的一个原因。

1.3 归一化处理的好处

1.3.1 加快梯度下降的求解速度,即提升模型的收敛速度

归一化可以加快梯度下降的求解速度,即提升模型的收敛速度
机器学习-特征工程-归一化

  • 两个特征区间相差非常大时,如上面左图中的x1[0-2000]和x2[1-5],形成的损失函数等高线偏椭圆,梯度下降迭代时很有可能走“之字型”路线(垂直长轴),从而导致需要迭代很多次才能收敛。

  • 而上方右图对两个特征进行了归一化,对应的等高线就会变圆,在梯度下降进行求解时能较快的收敛。

因此在机器学习中使用梯度下降法求最优解时,归一化也很有必要,否则模型很难收敛甚至有时不能收敛。

如果不归一化,各维特征的跨度差距很大,目标函数就会是“扁”的:

机器学习-特征工程-归一化
(图中椭圆表示目标函数的等高线,两个坐标轴代表两个特征)
这样,在进行梯度下降的时候,梯度的方向就会偏离最小值的方向,走很多弯路。
如果归一化了,那么目标函数就“圆”了:
机器学习-特征工程-归一化
看,每一步梯度的方向都基本指向最小值,可以大踏步地前进。

1.3.2 归一化可能提高模型的精度

在多指标评价体系中,由于各评价指标的性质不同,通常具有不同的量纲和数量级。

当各指标间的水平相差很大时,如果直接用原始指标值进行分析,就会突出数值较高的指标在综合分析中的作用,相对削弱数值水平较低指标的作用。因此,为了保证结果的可靠性,需要对原始指标数据进行标准化处理。

比如房价中面积为0到300,房间数为5以内,所以在方程中, 面积对应的参数只要稍稍变化一点, 他乘以面积的变化就会很大, 因为面积的值可以很大.

但是当房间数对应的参数也变化那一点点时, 他对预测价格的影响力不会像 面积 那样巨大. 这样的差别就会影响最终的工作效率,所以, 我们要提高效率, 特征的标准化就可以帮上忙。

我们在机器学习训练之前, 先对数据预先处理一下, 取值跨度大的特征数据, 我们浓缩一下, 跨度小的括展一下, 使得他们的跨度尽量统一.

1.4 范围归一化缺点

机器学习-特征工程-归一化
这种范围归一化适合数值比较集中的情况。

缺陷就是如果max和min不稳定(比如新数据加入需要重新计算),很容易使得归一化结果不稳定,使得后续的效果不稳定,实际使用中可以用经验常量来代替max和min。

1.5 python-sklean

在python sklearn中为sklearn.preprocessing.MinMaxScaler

变种,数据在[-1,1]
sklearn.preprocessing.MaxAbsScaler

0x02 z-score标准化

2.1 概念

机器学习-特征工程-归一化
其中μ为所有样本数据的均值,σ为所有样本数据的标准差。
标准化的公式很简单,步骤如下

1.求出各变量(指标)的算术平均值(数学期望)μ 和标准差 σ ;
  2.进行标准化处理:
  z=(x - μ)/ σ
  其中:z为标准化后的变量值;x为实际变量值。
  3.将逆指标前的正负号对调。
标准化后的变量值围绕0上下波动,大于0说明高于平均水平,小于0说明低于平均水平。

这个方法还可以理解为:距离均值有z个标准差 ( x - μ = zσ)

标准化将数据按期属性(按列进行)减去其均值,并处以其方差。得到的结果是,对于每个属性/每列来说所有数据都聚集在0附近,方差为1。

也就是说经过处理的数据符合标准正态分布,均值为0,标准差为1。

2.2 使用场景

z-score标准化方法适用于属性A的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况。

2.3 python-sklean

在sklean中是sklearn.preprocessing.StandardScaler。

0x03 log函数转换

通过以10为底的log函数转换的方法同样可以实现归一化,具体方法如下:
机器学习-特征工程-归一化
看了下网上很多介绍都是x*=log10(x),其实是有问题的,这个结果并非一定落到[0,1]区间上,应该还要除以log10(max),max为样本数据最大值,并且所有的数据都要大于等于1。

0x04 总结

4.1 在进行数据分析的时候,什么情况下需要对数据进行标准化处理?

主要看模型是否具有伸缩不变性。

  • 有些模型在各个维度进行不均匀伸缩后,最优解与原来不等价,例如SVM。对于这样的模型,除非本来各维数据的分布范围就比较接近,否则必须进行标准化,以免模型参数被分布范围较大或较小的数据dominate。
  • 有些模型在各个维度进行不均匀伸缩后,最优解与原来等价,例如logistic regression。对于这样的模型,是否标准化理论上不会改变最优解。但是,由于实际求解往往使用迭代算法,如果目标函数的形状太“扁”,迭代算法可能收敛得很慢甚至不收敛。所以对于具有伸缩不变性的模型,最好也进行数据标准化。

4.2 归一化和标准化的区别

机器学习-特征工程-归一化

4.3 什么时候用归一化?什么时候用标准化?

机器学习-特征工程-归一化

更多关于归一化标准化的讨论可以看特征工程中的「归一化」有什么作用?