2020-04-21 21:52:11
问题描述:为什么需要对数值类型的特征做归一化。
问题求解:
为了消除数据特征之间的量纲影响,我们需要对特征进行归一化处理,使得不同指标之间具有可比性。
举例来说,比如分析一个人的身高,体重对健康的影响,一个人的身高范围在1m~2m之间,一个人的体重范围在50kg~100kg之间,如果不做归一化处理,那么必然范围更大的体重对结果的影响会更加明显。为了得到更精准的结果,需要对数值进行归一化,使得各个指标的数据在同一数量级,方便比较分析。
对数值类型的特征做归一化可以将所有的特征都统一到一个大致相同的数值 区间内。最常用的方法主要有以下两种。
- 线性函数归一化(Min-Max Scaling)
它对原始数据进行线性变换,使结果映射到[0, 1]的范围,实现对原始数据的等比缩放。归一化公式如下:
Xnorm = (X - Xmin) / (Xmax - Xmin)
- 零均值归一化(Z-Score Normalization)
它会将原始数据映射到均值为 0、标准差为1的分布上。具体来说,假设原始特征的均值为μ、标准差为σ,那么 归一化公式定义为:
z = (x - u) / v
另外,对数据做归一化还有利于梯度下降时模型的收敛。
假设有两种数值型特征,x1的取值范围为 [0, 10],x2的取值 范围为[0, 3],于是可以构造一个目标函数符合图(a)中的等值图。 在学习速率相同的情况下,x1的更新速度会大于x2,需要较多的迭代才能找到 最优解。如果将x1和x2归一化到相同的数值区间后,优化目标的等值图会变成图(b)中的圆形,x1和x2的更新速度变得更为一致,容易更快地通过梯度下降找到最优解。