归一化、标准化、中心化

在数据前期预处理时,常常接触到normalization、standardization、Zero-center等操作,但是一直不了解其原因和效果以及具体操作,查询后作此整理

为什么:

​ 首先归一化和标准化具有一个优点,就是他的计算基本都是线性的,线性变换就有很多良好的性质,比如不会因为数值的改变而改变其大小排序,这些性质决定了处理后的数据不会出现“失效”的情况,反而能够提高数据的表现,这是能够进行这些处理的的基础。(归一化中有非线性的变换,如对数函数)

1.避免数值问题

数值过大可能会造成计算效率低和训练过程中值域越界的情况,比如遇到过的TensorFlow在训练中出现Nan报错

2.无量纲化

防止不同量纲特征中,数值变化范围大的特征掩盖数值变化范围小的特征

3.模型训练需要

1)加快梯度下降的速度

​ 如下图所示,在梯度下降时,如未进行归一化和标准化的等高线偏椭圆,迭代时可能陷入来回振荡的“之”型下降路线(垂直于长轴),从而使得迭代效率降低,而右图对两个特征进行了归一化,等高线趋向圆,梯度下降时收敛地更快

TIM截图20190114143034 TIM截图20190114143525

2)分类器性能需要

​ 一些分类器在训练时,其实类似上文提到的某一个特征数值过大的情况,比如在KNN的训练时,每个特征的重要性都是一样的,那么如果每一个特征的值域范围特别大,那么距离计算就是主要取决于这个特征,从而使得更重要但值域小的特征被掩盖

概念:

1.归一化(Normalization)

​ 1)把值域缩放到(0,1)或者(-1,1)之间,使得数据处理更加快捷

​ 2)把有量纲表达式变成无量纲表达式,便于不同量级的指标能够进行比较和加权。

​ 归一化是一种简化计算的方式,即将有量纲的表达式,经过变化,化为无量纲的表达式,成为标量

2.标准化(Standardization)

​ 使数据以0为中心左右分布,标准差为1,一般为线性缩放

​ 1)以0为中心分布,比如在去中心化的数据上做SVD分解等价于在原始数据上做PCA;机器学习中很多函数如SigmoidTanhSoftmax等都以0为中心左右分布(不一定对称)

​ 2)标准差为1,标准差为1有什么好处呢?这个更复杂一些

​ 对于xi与xi′两点间距离,往往表示为
TIM截图20190114202412
​ 其中dj(xij,xi′j)是属性jj两个点之间的距离,wj是该属性间距离在总距离中的权重,注意设wj=1,∀j并不能实现每个属性对最后的结果贡献度相同。对于给定的数据集,所有点对间距离的平均值是个定值,即:
TIM截图20190114202511
​ 可以使所有属性对全数据集平均距离的贡献相同。现在设dj为欧式距离(或称为二范数)的平方,它是最常用的距离衡量方法之一,则有
TIM截图20190114202732
​ 其中Varj是Var(Xj)的样本估计,也就是说每个变量的重要程度正比于这个变量在这个数据集上的方差。如果我们让每一维变量的标准差都为1(即方差都为1),每维变量在计算距离的时候重要程度相同。

3.中心化(Zero-centered)

​ 处理后使得平均值为0,对标准差无要求

4.归一化、标准化和中心化的区别

​ 1)方法上来说,中心化是减去均值,而标准化一般是减去均值后再除以标准差,都是线性的比例缩放,而归一化虽然大多是线性缩放,但也存在非线性缩放

​ 2)主要影响的值
​ 归一化是将样本特征值的变化范围缩放到[-1,1]或[0,1]之间,事实上仅有两端极值确定,而标准化,通过z-score的方式,根据均值和标准差使得值转化为标准正态分布,和整体样本的分布相关,每个样本点都对标准化产生影响,通过方差(variance)体现出来当数据较为集中时,标准差更小,于是数据在标准化后就会更加分散。如果数据本身分布很广,那么标准差较大,数据就会被集中到更小的范围内。

​ 3)

怎么用

操作:

归一化:

(1)Min-Max Normalization
   x’ = (x - X_min) / (X_max - X_min)

(2)平均归一化**
   x’ = (x - μ) / (MaxValue - MinValue)

(3)非线性归一化
   1)对数函数转换:
​ y = log10(x)
   2)反余切函数转换:
​ y = atan(x) * 2 / π

(1)和(2)有一个缺陷就是当有新数据加入时,可能导致max和min的变化,需要重新定义。(3)经常用在数据分化比较大的场景,有些数值很大,有些很小。通过一些数学函数,将原始值进行映射。该方法包括 log、指数,正切等。需要根据数据分布的情况,决定非线性函数的曲线,比如log(V, 2)还是log(V, 10)等。

标准化:

Z-score规范化(标准差标准化 / 零均值标准化)
  x’ = (x - μ)/σ

中心化:

​ x’ = x - μ

咋用:

​ 这一点就比较杂了,看了挺多回答,有蛮多个人见解的,粗略整理下:

归一化和标准化:

​ 二者都能缩放,但是理论上,标准化的输出范围是负无穷到正无穷,所以:
对输出结果的范围有要求,用归一化
数据分布的均匀、比较稳定,不存在极端的最值,用归一化
​ 如果数据存在异常值和较多噪音,用标准化,可以间接通过中心化避免异常值和极端值的影响

某知乎答主的回答提到了他个人经验:一般来说,我个人建议优先使用标准哈。对于输出有要求时再尝试别的方法,如归一化或者更加复杂的方法。很多方法都可以将输出范围调整到[0, 1],如果我们对于数据的分布有假设的话,更加有效的方法是使用相对应的概率密度函数来转换。让我们以高斯分布为例,我们可以首先计算高斯误差函数(Gaussian Error Function),此处定为er fc(·),那么可以用下式进行转化:
TIM截图20190114213916
这篇博客提到他的经验:1) 在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,第二种方法(Z-score standardization)表现更好。2) 在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用第一种方法或其他归一化方法。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围。

啥时候用:

1)模型的伸缩不变性

​ 这一点是看https://www.zhihu.com/question/30038463/answer/50491149这个王赟大佬的回答,觉得蛮有道理的,说是根据模型是否具有伸缩不变性

​ 有些模型在各个维度进行不均匀伸缩后,最优解的值与原来是不同的,比如前文提到的SVM、KNN,除非原来样本各个特征的值域范围比较接近,否则必须进行标准化,以免模型参数被分布范围较大或者较小的特征dominate

​ 而有的模型在不均匀伸缩后不改变原来的最优解,例如逻辑斯蒂回归,对于这样的模型,标准化前后理论上不会改变最优解,是可以不用的,但是前文也提到了,实际求解中往往使用迭代算法,为了防止Z型缓慢下降,所有也最好使用数据标准化。作者也提到,使用神经网络会使得神经网络的训练更容易

参考:

标准化和归一化什么区别? - 知乎:https://www.zhihu.com/question/20467170
R—数据标准化、归一化、中心化处理:https://zhuanlan.zhihu.com/p/33727799
特征工程中的[归一化]有什么作用? - 知乎:https://www.zhihu.com/question/20455227
神经网络为什么要归一化:http://nnetinfo.com/nninfo/showText.jsp?id=37
归一化 (Normalization)、标准化 (Standardization)和中心化/零均值化 (Zero-centered)
-简书 https://www.jianshu.com/p/95a8f035c86c
特征工程中的「归一化」有什么作用? - 王赟 Maigo的回答
-知乎 https://www.zhihu.com/question/20455227/answer/75202300

0%