【python学习】数据预处理-如何归一化?

作者:代码律动
链接:数据预处理的归一化手段应该如何应用到训练集,测试集和验证集中? - 知乎
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


作者:Orginal
链接:https://zhuanlan.zhihu.com/p/424518359
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

什么是归一化,它与标准化的区别是什么?_guyu1003的博客-CSDN博客_标准化和归一化的区别

1.归一化处理训练集、验证集、测试集

测试集的方差与均值都应该来自训练集的先验数据。需要你的数据集划分足够合理,使训练集上训练出来的模型有足够的泛化能力(当然模型的设计更关键)。

验证集的归一化也要和训练集一样,在调整参数的时候,我们面对的是验证集的结果。在验证集上得到最佳的参数设置,最终在测试集上进行实验。

2.常用归一化方法

Zero-mean normalization(z-score标准化)

公式:

x=\frac{x-\mu }{\sigma }

(1) 将原始数据集归一化为均值为0、方差1的数据集

(2) 该种归一化方式要求原始数据的分布可以近似为高斯分布,否则归一化的效果会变得很糟糕。

应用场景:在分类、聚类算法中,需要使用距离来度量相似性的时候(比如K-means等聚类算法 中),或者使用PCA技术进行降维的时候,Z-score standardization表现更好。

Min-max normalization(最大最小归一化)

公式:

x=\frac{x-x_{min}}{x_{max}-x_{min}}

(1) 线性函数将原始数据线性化的方法转换到[0 1]的范围, 计算结果为归一化后的数据,X为原始数据

(2) 本归一化方法比较适用在数值比较集中的情况;

(3) 缺陷:如果max和min不稳定,很容易使得归一化结果不稳定,使得后续使用效果也不稳定。实际使用中可以用经验常量来替代max和min。

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

Non-linear normaliztions(神经网络归一化)

非线性的归一化函数包含 log,exp,arctan, sigmoid等等。用非线性归一化的函数取决于输入数据范围以及期望的输出范围。比如 log() 函数在 [0, 1] 区间上有很强的区分度,arctan() 可以接收任意实数病转化到 [−π2,π2] 区间,sigmoid 接收任意实数并映射到 (0, 1)。

(1)log对数函数归一化

  x' = log10(x) /log10(max)

其中max表示样本数据的最大值,并且所有样本数据均要大于等于1.

(2)反正切函数归一化

x' = atan(x)*(2/pi)

使用这个方法需要注意的是如果想映射的区间为[0,1],则数据都应该大于等于0,小于0的数据将被映射到[-1,0]区间上.

Length-one normalization

公式:

|x=\frac{x}{\left| \left| x \right|\right|}

将特征转为单位向量的形式,可以剔除特征的强度的影响。这种处理用在不考虑向量大小而需要考虑向量方向的问题中,比如在一些文本情感的分类中,我们可能并不需要知道情感表达的强弱,而只要知道情感的类型,比如开心,生气等等。

  3.什么时候用归一化?

(1)如果对输出结果范围有要求,用归一化。

(2)如果数据较为稳定,不存在极端的最大最小值,用归一化。

(3)如果数据存在异常值和较多噪音,用标准化,可以间接通过中心化避免异常值和极端值的影响。

 3.归一化与标准化区别

不同点: 

(1)归一化:将样本的特征值转换到同一量纲下把数据映射到[0,1]或者[-1, 1]区间内,仅由变量的极值决定,因区间放缩法是归一化的一种。

应用于没有距离计算的地方上,丢失了距离信息;

“归一”,注意“一”,就是把数据归到(0,1)这个区间内;

常用的方法有: min-max归一化

(2)标准化:依照特征矩阵的列处理数据,其通过求z-score的方法,转换为标准正态分布,和整体样本分布相关,每个样本点都能对标准化产生影响。

标准化则是使用在不关乎权重的地方上,丢失了权重信息;

“标准”,就是标准正态分布,把数据转换成标准正态分布;
常用的方法有:z-score标准化

相同点:都能取消由于量纲不同引起的误差;都是一种线性变换,都是对向量X按照比例压缩再进行平移 

拓展:

归一化和标准化之外,还有中心化(就是将数据的mean变成0). 

一般来说,工程上优先使用标准化,然后再归一化

你可能感兴趣的:(工具栏,人工智能,深度学习)