多时候,如果不对数据进行归一化,会导致梯度下降复杂或是xgboost中的损失函数只能选择线性,导致模型效果不佳。下面我结合各类我看到的资料总结一下几种方式的归一化,并有python的实现。

从经验上说,归一化是让不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性。

如下有个形象的图解:

如果不归一化,各维特征的跨度差距很大,目标函数就会是“扁”的:


数据归一化_数据归一化

(图中椭圆表示目标函数的等高线,两个坐标轴代表两个特征) 
这样,在进行梯度下降的时候,梯度的方向就会偏离最小值的方向,走很多弯路。

如果归一化了,那么目标函数就“圆”了:


数据归一化_协方差_02

在知乎里,有人这么回答:

max-min(Min-Max Normalization)

也称为离差标准化,是对原始数据的线性变换,使结果值映射到[0 - 1]之间。转换函数如下:

tips : 适用于本来就分布在有限范围内的数据。

x_min表示样本数据的最小值,x_max表示样本数据的最大值。


output:

[0.0, 0.16666666666666666, 0.0, 0.5, 0.3333333333333333, 0.16666666666666666, 0.6666666666666666, 0.8333333333333334, 0.16666666666666666, 1.0]


如果想要将数据映射到[-1,1],则将公式换成:

output:

[-0.3833333333333333, -0.21666666666666665, -0.3833333333333333, 0.1166666666666667, -0.049999999999999968, -0.21666666666666665, 0.28333333333333338, 0.45000000000000001, -0.21666666666666665, 0.6166666666666667]

适用场景

这种归一化方法比较适用在数值比较集中的情况。但是,如果max和min不稳定,很容易使得归一化结果不稳定,使得后续使用效果也不稳定,实际使用中可以用经验常量值来替代max和min。而且当有新数据加入时,可能导致max和min的变化,需要重新定义。

在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用第一种方法或其他归一化方法。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围。

z-score 标准化方法

tips : 适用于分布没有明显边界的情况,受outlier影响也较小。

这种方法给予原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。经过处理的数据符合标准正态分布,即均值为0,标准差为1,转化函数为:


其中,μ表示所有样本数据的均值,σ表示所有样本的标准差。


output:

[-0.57356608478802995, -0.32418952618453861, -0.57356608478802995, 0.17456359102244395, -0.074812967581047343, -0.32418952618453861, 0.42394014962593524, 0.67331670822942646, -0.32418952618453861, 0.92269326683291775]

总结

上面有两种方法,那么到底什么情况使用哪一个呢?

  1. 在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,第二种方法(Z-score standardization)表现更好。
  2. 在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用第一种方法或其他归一化方法。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围。

为什么在距离度量计算相似性、PCA中使用第二种方法(Z-score standardization)会更好呢?我们进行了以下的推导分析:

使用第二种方法进行计算,我们先不做方差归一化,只做0均值化,变换后数据为


新数据的协方差为:


由于

因此

而原始数据的协方差为:


因此


不变

接着做方差归一化:


结果如下:


使用第一种方式计算,为了方便分析,我们对x维进行线性函数变换:


计算协方差

可以看到,使用第一种方法(线性变换后),其协方差产生了倍数值的缩放,因此这种方式无法消除量纲对方差、协方差的影响,对PCA分析影响巨大;同时,由于量纲的存在,使用不同的量纲、距离的计算结果会不同。 
而在第二种归一化方式中,新的数据由于对方差进行了归一化,这时候每个维度的量纲其实已经等价了,每个维度都服从均值为0、方差1的正态分布,在计算距离的时候,每个维度都是去量纲化的,避免了不同量纲的选取对距离计算产生的巨大影响。

总结来说,在算法、后续计算中涉及距离度量(聚类分析)或者协方差分析(PCA、LDA等)的,同时数据分布可以近似为正态分布,应当使用0均值的归一化方法。其他应用中更具需要选用合适的归一化方法。