程序员

z-score归一化

2018-04-10  本文已影响0人  zzkdev

用途

对输入数据进行归一化处理

公式

其中σ为数据标准差(划重点,不是方差),μ为样本平均值。对数据进行归一化后,数据的平均值变为0,方差变为1。

直观过程

原始数据一开始是这样的:

前两步减去均值,数据分布为:

注意:此时特征x2的方差比x1要大很多

之后除以数据的标准差,数据分布为:

注意:需要使用相同的μ和σ来归一化测试集和训练集,而不是在训练集和测试集上分别预估μ和σ。因为我们希望不论是训练数据还是测试数据,都是使用相同μ和σ定义的相同数据转换。其中μ和σ是由训练集数据计算得来的。

这有什么用

如果不使用归一化,将会得到一个细长狭窄的代价函数(图中箭头标示为最小值点)

梯度下降过程为:

下面是归一化后的代价函数

梯度下降过程为

当数据没有归一化的时候,x1的范围较大(这里假设为0 ~ 1000),x2范围较小(这里假设为0 ~ 10),可以观察到这里x2取值范围远大于x2,这样就造成画损失函数的时候,损失函数可以表示为:


这样画出来的函数图想的等高线为椭圆状,寻找最优解的过程也较为曲折

而如果进行归一化处理后,函数的损失函数可以表示为:

由于两个系数几乎一样,这样画出来的函数图像的等高线则会类似于圆形形状,这样寻找最优解就会较为顺畅:

从上可以看出,数据归一化后,最优解的寻优过程明显会变得平缓,更容易正确的收敛到最优解,加快了梯度下降求最优解的速度。

也可以换一种说法,不同特征的量纲的单位可能会有所不同,变化区间处于不同的数量级。如果不进行归一化,可能导致某些特征被忽略,比如x1的特征范围为1 ~ 1000,x2特征的范围为0 ~ 1,此时如果我们要做一个分类的话,那么x2很可能就会被忽略掉。即使不被忽略掉,做梯度下降时也会变得很慢,甚至不收敛。

什么时候使用

当特征的区间相差非常大时使用。比如X1区间是[0,2000],X2区间是[1,5],其所形成的等高线非常尖。当使用梯度下降法寻求最优解时,很有可能走“之字型”路线(垂直等高线走),从而导致需要迭代很多次才能收敛。

其他类型的归一化

min-max归一化

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

这种比较适和于数值比较集中的情况。如果max和min不稳定,很容易使得归一化结果不稳定,使得后续使用效果也不稳定,实际使用中可以用经验常量值来替代max和min。而且当有新数据加入时,可能导致max和min的变化,需要重新定义。(例子:在处理自然图像时,我们获得的像素值在 [0,255] 区间中,常用的处理是将这些像素值除以 255,使它们缩放到 [0,1] 中)

参考资料


这里是我的博客


上一篇下一篇

猜你喜欢

热点阅读