机器学习中,为何经常要对数据归一化?

机器学习中,为何经常要对数据归一化?原因有二:(1)归一化后加快了梯度下降求最优解的速度;(2)归一化有可能提高精度。

为什么归一化能提高梯度下降法求解最优解的速度?

假定为预测房价的例子,自变量为面积大小和房间数,因变量为房价。那么可以得到的公式为:

y=θ1x1+θ2x2

其中,x1代表房间数,θ1代表x1变量前面的系数;x2代表面积,θ2代表x2变量前面的系数。

下面两张图(损失函数的等高线)代表数据是否归一化的最优解寻解过程:
未归一化:
机器学习中,为何经常要对数据归一化?

归一化之后:
机器学习中,为何经常要对数据归一化?

在寻找最优解的过程也就是在使得损失函数值最小的 θ1θ2。当数据没有归一化的时候,面积数的范围可以从0~1000,房间数的范围一般为0~10,可以看出面积数的取值范围远大于房间数。也就导致了等高面为长椭圆形,非常尖,因为变量前的系数大小相差很大,当使用梯度下降法寻求最优解时,很有可能走“之字型”路线(垂直等高线走)。而数据归一化后,损失函数变量前面的系数差距已不大,图像的等高面近似圆形,在梯度下降进行求解时能较快的收敛。

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

归一化有可能提高精度

一些机器学习算法需要计算样本之间的距离(如欧氏距离),例如 KNN、K-means 等。如果一个特征值域范围非常大,那么距离计算就主要取决于这个特征,从而与实际情况相悖(比如这时实际情况是值域范围小的特征更重要)。

归一化与标准化的区别

归一化:把数变为(0,1)之间的小数;
标准化:将数据按比例缩放,使之落入一个小的特定区间。

常用的归一化方法

  1. 线性转换
    y=xMinValueMaxValueMinValue
  2. 对数函数转换
    y=log10x
  3. 反余切函数转换
    y=atan(x)2π
  4. 线性与对数函数结合

关于常用的标准化方法,详情可参考博文:常用的数据标准化方法