本文总结归一化与标准化的理解和使用, 涉及到无量纲,中心化等知识, 但是并不完全
归一化
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很重要