不要把归一化和标准化混为一谈

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不要把归一化和标准化混为一谈相关的知识,希望对你有一定的参考价值。

参考技术A 长期以来一直没有清楚的弄明白标准化和归一化的问题,都当作同一件事情对待。知道是数据特征在进行模型运算之前去量纲、转换到小区间的一种Feature scaling(特征缩放)方法。

本文将更进一步了解归一化、标准化,解答以下问题:

大的层面而言,归一化和标准化是差不多的,都是模型运算器对数据进行处理,从而使数值都落入到统一的数值范围,从而在建模过程中,各个特征量没差别对待。

但归一化和标准化并不是同一个东西,存在以下差异:

在使用梯度下降的方法求解最优化问题时, 归一化/标准化后可以加快梯度下降的求解速度,即提升模型的收敛速度。

所以像之前提到的线性回归、逻辑回归、神经网络等使用梯度下降法求解最优参数的算法,输入数据需要做归一化/标准化处理,提升模型收敛速度。

一些算法需要计算样本之间的距离(如欧氏距离),例如KNN、kmeans等聚类算法。如果一个特征值域范围非常大,那么距离计算就主要取决于这个特征,从而与实际情况相悖。

各个指标之间由于计量单位和数量级不尽相同,从而使得各指标间不具有综合性,不能直接进行综合分析,这时就必须采用某种方法对各指标数值进行无量纲化处理,解决各指标数值不可综合性问题。

什么是量纲?

去量纲指的的去除数据单位之间的不统一,将数据统一变换为无单位(统一单位)的数据集。

处理后数据范围为[0,1]

在阅读《基于神经网络的个人信用评分模型研究》一文的时候发现文章对定性指标使用极值归一化方法,对定量指标使用线性比例缩放法。因此提出问题:什么场景使用哪种归一化方法?毕竟我们有那么多种归一化的方法。

目前没找到解答该疑问的相关资料(暂放)

(1)一般建议优先使用标准化,在机器学习中,标准化是更常用的手段,归一化的应用场景是有限的。
(2)如果数据不为稳定,存在极端的最大最小值,不要用归一化。
(3)在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,标准化(Z-score standardization)表现更好 [6] 。
(4)在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用归一化方法。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围 [6] 。

标准化的隐含假设是数据符合正态分布的

不是所有的模型都需要做归一的,比如模型算法里面有没关于对距离的衡量,没有关于对变量间标准差的衡量。

(1)比如decision tree 决策树,他采用算法里面没有涉及到任何和距离等有关的,所以在做决策树模型时,通常是不需要将变量做标准化的 [7] 。

(2)概率模型不需要归一化,因为它们不关心变量的值,而是关心变量的分布和变量之间的条件概率。

写本文是为了解答一些疑问,参考并整理了各种资料,感谢各种简友、知友、博主的分享。

[1] 归一化、标准化和中心化/零均值化: https://www.jianshu.com/p/95a8f035c86c
[2] 知乎-标准化和归一化的差别: https://www.zhihu.com/question/20467170
[3] https://www.zhihu.com/question/20455227/answer/370658612
[4] https://maristie.com/blog/differences-between-normalization-standardization-and-regularization/
[5] 如何理解Normalization,Regularization 和 standardization? https://www.zhihu.com/question/59939602
[6] 归一化方法总结: https://blog.csdn.net/young951023/article/details/78389445
[7] https://blog.csdn.net/u010947534/article/details/86632819

归一化和标准化的一些理解

参考技术A 很多的时候我发现很多人和我一样我对机器学习的基本概念一知半解,比如我经常会听到归一化及标准化,傻傻分不清楚。最近看了一篇文章清楚的阐述了归一化和标准化的定义、适用场景、物理意义及使用意义。经过原作者授权以后,我想进行转发并加上我的一些理解,和更多的人一起学习进步。

在机器学习和数据挖掘中,经常会听到两个名词:归一化(Normalization)与标准化(Standardization)。它们具体是什么?带来什么益处?具体怎么用?本文来具体讨论这些问题。

一、是什么

1. 归一化

常用的方法是通过对原始数据进行线性变换把数据映射到[0,1]之间,变换函数为:

其中minmin是样本中最小值,maxmax是样本中最大值,注意在数据流场景下最大值与最小值是变化的。另外,最大值与最小值非常容易受异常点影响,所以这种方法鲁棒性较差,只适合传统精确小数据场景。

2. 标准化

常用的方法是z-score标准化,经过处理后的数据均值为0,标准差为1,处理方法是:

其中μμ是样本的均值,σσ是样本的标准差,它们可以通过现有样本进行估计。在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。

二、带来什么

归一化的依据非常简单,不同变量往往量纲不同,归一化可以消除量纲对最终结果的影响,使不同变量具有可比性。比如两个人体重差10KG,身高差0.02M,在衡量两个人的差别时体重的差距会把身高的差距完全掩盖,归一化之后就不会有这样的问题。

标准化的原理比较复杂,它表示的是原始值与均值之间差多少个标准差,是一个相对值,所以也有去除量纲的功效。同时,它还带来两个附加的好处:均值为0,标准差为1。

均值为0有什么好处呢?它可以使数据以0为中心左右分布(这不是废话嘛),而数据以0为中心左右分布会带来很多便利。比如在去中心化的数据上做 SVD 分解等价于在原始数据上做 PCA ;机器学习中很多函数如 Sigmoid 、 Tanh 、 Softmax 等都以0为中心左右分布(不一定对称)。

标准差为1有什么好处呢?这个更复杂一些。对于xixi与xi′xi′两点间距离,往往表示为

其中dj(xij,xi′j)dj(xij,xi′j)是属性jj两个点之间的距离,wjwj是该属性间距离在总距离中的权重,注意设wj=1,∀jwj=1,∀j并不能实现每个属性对最后的结果贡献度相同。对于给定的数据集,所有点对间距离的平均值是个定值,即

是个常数,其中

可见第jj个变量对最终整体平均距离的影响是wj⋅¯djwj⋅d¯j,所以设wj∼1/¯djwj∼1/d¯j可以使所有属性对全数据集平均距离的贡献相同。现在设djdj为欧式距离(或称为二范数)的平方,它是最常用的距离衡量方法之一,则有

其中varjvarj是Var(Xj)Var(Xj)的样本估计,也就是说每个变量的重要程度正比于这个变量在这个数据集上的方差。如果我们让每一维变量的标准差都为1(即方差都为1),每维变量在计算距离的时候重要程度相同。

三、怎么用

在涉及到计算点与点之间的距离时,使用归一化或标准化都会对最后的结果有所提升,甚至会有质的区别。那在归一化与标准化之间应该如何选择呢?根据上一节我们看到,如果把所有维度的变量一视同仁,在最后计算距离中发挥相同的作用应该选择标准化,如果想保留原始数据中由标准差所反映的潜在权重关系应该选择归一化。另外,标准化更适合现代嘈杂大数据场景。

以上是关于不要把归一化和标准化混为一谈的主要内容,如果未能解决你的问题,请参考以下文章

归一化和标准化的使用场景以及归一化和标准化有没有改变数据分布

在python上数据归一化后怎样还原

数据标准化和数据归一化有啥区别吗?

数据归一化和两种常用的归一化方法

数据归一化和两种常用的归一化方法

数据归一化和两种常用的归一化方法