ML——归一化与标准化

本文总结归一化与标准化的理解和使用, 涉及到无量纲,中心化等知识, 但是并不完全


归一化

Normalization

  • 把数据变成[0,1]或[-1,1]的小数

  • 把有量纲表达式变成无量纲表达式,便于不同单位或量级的指标能够进行比较和加权

  • 归一化是一种简化计算的方式,即将有量纲的表达式,经过变换,化为无量纲的表达式,成为纯量

    • 无量纲的理解:
      • 通过某种数值变换去掉单位,的影响,比如”kg”和”g”都可以表示体重,但是前者的数字比后者小
      • 不管是”kg”还是”g”作为单位,无量纲后他们的数值应该是一样的
      • 无量纲的本质是说: 变换后, 单位不再影响数据的数值
  • 应用:

    • LR等用梯度下降时, 先使用数据归一化可以使得梯度下降速度加快(否则可能下降方向并不是最好方向)

归一化的不同方法

线性归一化
  • Min-Max Normalization
    $$ x_i’ = \frac{x_i-min(X)}{max(X)-min(X)}$$
  • 平均归一化
    $$ x_i’ = \frac{x_i-mean(X)}{max(X)-min(X)}$$
  • 上面两种归一化在新数据加入时最大最小值会变化,所以不能在线归一化
非线性归一化
  • 对数函数转换等

标准化

Standardization

  • 使每个特征中的数值平均变为0(将每个特征的值都减掉原始资料中该特征的平均)、标准差变为1
  • 数学描述
    $$x_i’ = \frac{x-mean(X)}{std(X)}$$

中心化

  • 平均值为0,对标准差无要求
  • 数学描述
    $$x_i’ = x-mean(X)$$

归一化 vs 标准化

不同点

  • 归一化是将样本的特征值转换到同一量纲下把数据映射到[0,1]或者[-1, 1]区间内,仅由变量的极值决定,因区间放缩法是归一化的一种
  • 标准化是依照特征矩阵的列处理数据,其通过求z-score的方法,转换为标准正态分布,和整体样本分布相关,每个样本点都能对标准化产生影响

相同点

  • 都能取消由于量纲不同引起的误差
  • 都是一种线性变换(都是对向量X按照比例压缩再进行平移)
  • 个人理解: 标准化可以看作是一种特殊的归一化

中心化 vs 标准化

  • 标准化 = 中心化 + 数据除以标准差(使得数据标准差为1)
  • 有些地方也把零均值归一化(Z-Score Normalization)称为标准化,公式与标准化相同

总结

  • 一些模型一般需要归一化
    • LR: 加快梯度下降过程(因为不同维度使用相同的学习率,所以容易造成走弯路)
    • KNN: 防止计算距离时大数吃小数的情况发生
    • PCA: 归一化后 \(X^TX\) 才能表示数据的协方差矩阵
    • 神经网络

关于神经网络为什么需要归一化?

数值问题
  • 归一化可以避免很多不必要的数值问题
    • 我理解的一种情况: 输入太大时, 权重太小, 容易造成精度问题, 数值太小时同理
  • 归一化可以避免梯度爆炸等问题
    • 个人理解: 如果数值很大的话, 梯度一般也会对应很大, 连续乘以后就容易造成梯度爆炸, 数值太小, 同理, 容易造成梯度消失
  • 加快学习
    • 与LR一样, 使用梯度下降优化神经网络参数时, 如果数值差别太大, 可能造成优化时梯度优化走弯路(因为不同维度使用的是相同的学习率)
  • 避免某些数值小的神经元输出被数值大的输出吞掉的情况
    • 个人理解: 虽然说我们找到合适权重后,可以使得二者到下一个神经元的差值没那么大, 但是我的理解是初始化的时候不知道数值,所以权重是随机的,之后如果两个神经元数值差距太大的话,是否会大值吞小值很难说

关于LR为什么需要归一化?

不是必要的

  • 因为LR使用梯度下降法求解参数时, 特征之间差别太大容易影响收敛速度, 归一化可以提升LR的收敛速度, 同时不影响分类结果

关于SVM为什么需要归一化?

是必要的

  • 因为SVM寻找的是所谓的间隔(margin), 就是两个支持向量的间隔
  • 如果不归一化的话, 这个间隔会因为不同特征的单位等, 数值被放大或者缩小, 从而造成无法评估间隔, 所以归一化对于SVM很重要