资讯专栏INFORMATION COLUMN

数据归一化

MAX_zuo / 1420人阅读

摘要:总结来说,在算法后续计算中涉及距离度量聚类分析或者协方差分析等的,同时数据分布可以近似为正态分布,应当使用均值的归一化方法。

数据归一化

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

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

如下有个形象的图解:

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

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

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

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

主要看模型是否具有伸缩不变性。有些模型在各个维度进行不均匀伸缩后,最优解与原来不等价,例如SVM。对于这样的模型,除非本来各维数据的分布范围就比较接近,否则必须进行标准化,以免模型参数被分布范围较大或较小的数据dominate。有些模型在各个维度进行不均匀伸缩后,最优解与原来等价,例如logistic regression。对于这样的模型,是否标准化理论上不会改变最优解。但是,由于实际求解往往使用迭代算法,如果目标函数的形状太“扁”,迭代算法可能收敛得很慢甚至不收敛。所以对于具有伸缩不变性的模型,最好也进行数据标准化。

作者:王赟 Maigo
链接:https://www.zhihu.com/question/30038463/answer/50491149
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
max-min(Min-Max Normalization)

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

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

$$x^{*}=frac{x-x_{min}}{x_{max}-x_{min}}$$

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

def Normalization(x):
    return [(float(i)-min(x))/float(max(x)-min(x)) for i in x]


# 测试:
x=[1,2,1,4,3,2,5,6,2,7]
b=Normalization(x)

output:

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

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

$$x^{*}=frac{x-x_{mean}}{x_{max}-x_{min}}$$

import numpy as np
def Normalization2(x):
    return [(float(i)-np.mean(x))/(max(x)-min(x)) for i in x]

# 测试
x=[1,2,1,4,3,2,5,6,2,7]
b=Normalization2(x)

output:

[-0.3833333333333333, -0.21666666666666665, -0.3833333333333333, 0.1166666666666667, -0.049999999999999968, -0.21666666666666665, 0.28333333333333338, 0.45000000000000001, -0.21666666666666665, 0.6166666666666667]
z-score 标准化方法

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

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

$$x^{*}=frac{x-mu}{sigma}$$

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

import numpy as np
def z_score(x): 
    x_mean=np.mean(x) 
    s2=sum([(i-np.mean(x))*(i-np.mean(x)) for i in x])/len(x) 
    return [(i-x_mean)/s2 for i in x]

# 测试:
x=[1,2,1,4,3,2,5,6,2,7]
print z_score(x)

output:

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

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

在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,第二种方法(Z-score standardization)表现更好。

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

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

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

$$x^{"} = x - overline{x}

y^{"} = y - overline{y}$$

新数据的协方差为:

$$sigma^{"}_{xy} = frac{1}{n}sum^{n}_{i=1}(x^{"}_i-overline{x^{"}})(y^{"}_i-overline{y^{"}})$$

由于

$$overline{x^{"}} = 0 overline{y^{"}} = 0$$

因此

$$sigma^{"}_{xy} = frac{1}{n}sum^{n}_{i=1}(x^{"}_i)(y^{"}_i)$$

而原始数据的协方差为:

$$sigma^{"}_{xy} = frac{1}{n}sum^{n}_{i=1}(x_i-overline{x})(y_i-overline{y}) space space = sigma^{"}_{xy} = frac{1}{n}sum^{n}_{i=1}(x^{"}_i)(y^{"}_i)$$

因此

$$sigma^{"}_{xy} = sigma_{xy}$$

以上说明了将数据变换成都减去均值后,$sigma$不变

接着做方差归一化:

$$x^{""} = frac{x - overline{x}}{sigma_x}

y^{""} = frac{y - overline{y}}{sigma_y}$$

结果如下:

$$sigma^{""}_{xy} = frac{1}{n}sum^{n}_{i=1}(x^{""}_i-overline{x^{""}})(y^{""}_i-overline{y^{""}})

space space space space space= frac{1}{n}sum^{n}_{i=1}(frac{x_i-overline{x^{}}}{sigma_x})(frac{y^{}_i-overline{y^{}}}{sigma_y}) 
space space space space space spacespacespacespacespacespacespace = frac{1}{nsigma_xsigma_y}sum^{n}_{i=1}(x_i-overline{x^{}})(y^{}_i-overline{y^{}})  = spacespacespacespacespacespacefrac{sigma_{xy}}{sigma_xsigma_y}$$

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

$$x^{"} = c_x · x

y^{"} = c_y · y$$

计算协方差

$$sigma^{"}_{xy} = frac{1}{n}sum^{n}_{i=1}{(c_xx_i -c_xoverline{x})(c_yy_i -c_yoverline{y})}
= c_xc_ysigma_{xy}$$

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

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

paper done 2017/5/2

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/18265.html

相关文章

  • 机器学习之数据一化

    摘要:机器学习中,数据归一化是非常重要,如果不进行数据归一化,可能会导致模型坏掉或者训练出一个奇怪的模型。解决方法就是将是数据映射到同一尺度,这就是数据归一化。数据归一化的两个常用方式为最值归一化和均值方差归一化。 机器学习中,数据归一化是非常重要,如果不进行数据归一化,可能会导致模型坏掉或者训练出一个奇怪的模型。 为什么要进行数据归一化 现在有一个训练数据集,包含两个样本,内容如下: ...

    W4n9Hu1 评论0 收藏0
  • 机器学习之数据一化

    摘要:机器学习中,数据归一化是非常重要,如果不进行数据归一化,可能会导致模型坏掉或者训练出一个奇怪的模型。解决方法就是将是数据映射到同一尺度,这就是数据归一化。数据归一化的两个常用方式为最值归一化和均值方差归一化。 机器学习中,数据归一化是非常重要,如果不进行数据归一化,可能会导致模型坏掉或者训练出一个奇怪的模型。 为什么要进行数据归一化 现在有一个训练数据集,包含两个样本,内容如下: ...

    printempw 评论0 收藏0
  • 「自一化神经网络」提出新型激活函数SELU

    摘要:循环神经网络令语音和自然语言处理达到了新阶段。自归一化神经网络对于扰动是具有鲁棒性的,它在训练误差上并没有高方差见图。构建自归一化神经网络我们通过调整函数的属性以构建自归一化神经网络。 近日,arXiv 上公开的一篇 NIPS 投稿论文《Self-Normalizing Neural Networks》引起了圈内极大的关注,它提出了缩放指数型线性单元(SELU)而引进了自归一化属性,该单元主...

    马忠志 评论0 收藏0
  • 谷歌大脑发布GAN全景图:看百家争鸣的生成对抗网络

    摘要:近日,谷歌大脑发布了一篇全面梳理的论文,该研究从损失函数对抗架构正则化归一化和度量方法等几大方向整理生成对抗网络的特性与变体。他们首先定义了全景图损失函数归一化和正则化方案,以及最常用架构的集合。 近日,谷歌大脑发布了一篇全面梳理 GAN 的论文,该研究从损失函数、对抗架构、正则化、归一化和度量方法等几大方向整理生成对抗网络的特性与变体。作者们复现了当前较佳的模型并公平地对比与探索 GAN ...

    asoren 评论0 收藏0
  • 一个GAN生成ImageNet全部1000类物体

    摘要:作者在论文中将这种新的谱归一化方法与其他归一化技术,比如权重归一化,权重削减等,和梯度惩罚等,做了比较,并通过实验表明,在没有批量归一化权重衰减和判别器特征匹配的情况下,谱归一化改善生成的图像质量,效果比权重归一化和梯度惩罚更好。 就在几小时前,生成对抗网络(GAN)的发明人Ian Goodfellow在Twitter上发文,激动地推荐了一篇论文:Goodfellow表示,虽然GAN十分擅长...

    huaixiaoz 评论0 收藏0
  • 【DL-CV】批量一化(BN算法)

    摘要:为了解决这个问题出现了批量归一化的算法,他对每一层的输入进行归一化,保证每层的输入数据分布是稳定的,从而加速训练批量归一化归一化批,一批样本输入,,个样本与激活函数层卷积层全连接层池化层一样,批量归一化也属于网络的一层,简称。 【DL-CV】数据预处理&权重初始化【DL-CV】正则化,Dropout 先来交代一下背景:在网络训练的过程中,参数的更新会导致网络的各层输入数据的分布不断变化...

    miya 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<