为什么要对特征做归一化/标准化?
统一量纲,对于距离敏感性模型能够提升精度(如K-means、KNN、PCA、SVM),对基于梯度下降的模型能加快收敛(如线性回归、逻辑回归、神经网络)。
为什么对于基于距离的模型能够提升精度?
不同的特征的数量级不同,如果不使用标准化/归一化,原始数量级大的特征可能会对模型输出造成较大影响,而数量级小的特征可能对于模型输出影响较小。也即模型要学习到:在特征同等重要的情况下,对数量级大的特征分配一个小的权重,对数量级小的特征分配一个大的权重。归一化之后可以优化这一过程,降低了模型的学习难度,让模型只需要学习到对重要特征赋予更大的权重,而对于不重要的特征赋予较小的权重即可,因此基于距离的模型能够在归一化之后提升模型精度。
为什么基于梯度下降的模型能加快收敛?
原始特征下,因尺度差异,这就导致了很可能不同特征需要学习的权重差别也会很大,其损失函数的等高线图就可能是椭圆形,梯度方向垂直于等高线,下降会走之字形路线,而不是指向local minimum。通过对特征进行zero-mean and unit-variance变换后,其损失函数的等高线图更接近圆形,梯度下降的方向震荡更小,收敛更快。
对于树模型是否需要做归一化,为什么?
不需要,因为数值缩放不影响分裂点位置,对树模型的结构不造成影响。
常用的归一化方法如下:
min-max normalization:
x
′
=
x
−
min
(
x
)
max
(
x
)
−
min
(
x
)
x^{\prime}=\frac{x-\min (x)}{\max (x)-\min (x)}
x′=max(x)−min(x)x−min(x)
Mean normalization: x ′ = x − x ˉ max ( x ) − min ( x ) x^{\prime}=\frac{x-\bar{x}}{\max (x)-\min (x)} x′=max(x)−min(x)x−xˉ
Standardization (Z-score Normalization): x ′ = x − x ˉ σ x^{\prime}=\frac{x-\bar{x}}{\sigma} x′=σx−xˉ
Scaling to unit length: x ′ = x ∥ x ∥ x^{\prime}=\frac{x}{\|x\|} x′=∥x∥x
上述4种方式,前3种为逐行操作,最后1种为逐列操作。
留个问题:假设我们要基于特征(x1,x2,…xn)来预测y,我们已知y=x1+x2+…+xn,且x1,x2,xn之间数量级差别很大,现在我们要建立一个模型来通过x预测y,你觉得是否应该进行归一化?
参考:https://www.cnblogs.com/shine-lee/p/11779514.html