归一化(normalization)、标准化(standarization)

归一化(normalization)、标准化(standarization)

   在机器学习领域,不同的评价指标(及特征向量中的不同特征就是所描述的不同评价指标),往往具有不同的量纲和量纲单位,这样的情况会影响到数据分析的结果,为了消除指标之间的量纲影响,需要进行数据的标准化处理,已解决数据指标之间的可比性。原始数据经过数据标准化处理之后,各指标处于同一数量级,适合进行综合对比评价。
   量纲影响举例:比如两个人体重差10KG,身高差0.02M,在衡量两个人的差别时体重的差距会把身高的差距完全掩盖,标准化之后就不会有这样的问题。

1 、归一化:通过对原始数据进行线性变换,把数据映射到[0,1]之间。(Min-Max Normalization)

特点:
1、对不同的特征维度进行伸缩变换,将数据变成[0,1]之间的数,方便数据处理,快速便捷
2、改变了原始数据的分布,使各个特征维度对目标函数的影响权重是一致的(即使得那些扁平分布的数据伸缩变换成类圆形)
3、对目标函数的影响体现在数值上
4、无量纲化处理:把有量纲表达式变成无量纲表达式

好处:
1、提高迭代求解的收敛速度
  如下图,x1的取值为0-2000,而x2的取值为1-5,假如只有这两个特征,对其进行优化时,会得到一个窄长的椭圆形,导致在梯度下降时,梯度的方向为垂直等高线的方向而走之字形路线,这样会使迭代很慢。
相比之下,进行归一化处理之后,右图的迭代就会很快(理解:也就是步长走多走少方向总是对的,不会走偏,少走很多弯路)
归一化(normalization)、标准化(standarization)_第1张图片
2、提高迭代求解的精度
  归一化的另一好处是提高精度,这在涉及到一些距离计算的算法时效果显著,比如算法要计算欧氏距离,上图中x2的取值范围比较小,涉及到距离计算时其对结果的影响远比x1带来的小,所以这就会造成精度的损失。所以归一化很有必要,他可以让各个特征对结果做出的贡献相同

缺点:
1、最大值和最小值非常容易受异常点影响
2、鲁棒性较差,只适合传统精确小数据场景
3、加入新数据时,最大最小值可能需要变化

公式:
一般采用最大-最小规范化对原始数据进行线性变换:

X*=(X-Xmin)/(Xmax-Xmin)

但这种方法有个缺陷就是当有新数据加入时,可能导致max和min的变化,需要重新定义。另外,最大值与最小值非常容易受异常点影响,所以这种方法鲁棒性较差,只适合传统精确小数据场景。

2、 标准化:对原始数据进行缩放处理,限制在一定的范围内。一般指正态化,即均值为0,方差为1。标准化后的数据有正有负。(Z-score standarization)

特点:
1、对不同特征维度的伸缩变换使得不同度量之间的特征具有可比性
2、不改变原始数据的分布,保持各个特征维度对目标函数的影响权重
3、在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。
4、对目标函数的影响体现在几何分布上
5、无量纲化处理:要解决数据的可比性

公式:
常用的方法是z-score标准化,经过处理后的数据均值为0,标准差为1。
该归一化方式要求原始数据的分布可以近似为高斯分布,否则标准化的效果会变得糟糕。可以通过现有样本进行估计,在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。处理方法为:
在这里插入图片描述

3、归一化(min-max normalization)、标准化(z-score standarization)的应用场景概括

a) 在分类、聚类算法中,需要使用距离来度量相似性的时候,或者使用PCA进行降维的时候,使用标准化(Z-score)表现更好。
b)在不涉及距离度量、协方差计算、数据不符合正太分布时候,使用归一化(最大最小值归一化方法)或者其他归一化方法。比如图像处理中将RGB图像转换为灰度图像后将其值限定在【0,255】的范围。

4、归一化、标准化举例

归一化(normalization)、标准化(standarization)_第2张图片
归一化(normalization)、标准化(standarization)_第3张图片
从上面两个坐标图可以看出,样本在数据值上的分布差距是不一样的,但是其几何距离是一致的。而标准化就是一种对样本数据在不同维度上进行一个伸缩变化(而不改变数据的几何距离),也就是不改变原始数据的信息(分布)。这样的好处就是在进行特征提取时,忽略掉不同特征之间的一个度量,而保留样本在各个维度上的信息(分布)。
归一化(normalization)、标准化(standarization)_第4张图片
从采用大单位的身高和体重这两个特征来看,如果采用标准化,不改变样本在这两个维度上的分布,则左图还是会保持二维分布的一个扁平性;而采用归一化则会在不同维度上对数据进行不同的伸缩变化(归一区间,会改变数据的原始距离,分布,信息),使得其呈类圆形。虽然这样样本会失去原始的信息,但这防止了归一化前直接对原始数据进行梯度下降类似的优化算法时最终解被数值大的特征所主导。归一化之后,各个特征对目标函数的影响权重是一致的。这样的好处是在提高迭代求解的精度。

5、其他非线性归一化方法

经常用在数据分化比较大的场景,有些数值很大,有些数值很小。通过一些数学函数将原始值进行映射。
a) log对数函数转换法
通过以10为底的log函数实现归一化:

在这里插入图片描述
max为样本数据最大值,并且所有数据都要大于等于1

b) atan函数转换法
用反正切函数实现数据的归一化
在这里插入图片描述
使用这个方法需要注意,如果想要映射的区间是[0,1],则数据都应该大于等于0,小于0的数据将被映射到[-1,0]区间上,并非所有的数据归一化的结果都映射到[0,1]区间上。

c) L2范数归一化
L2范数归一化就是特征向量中的每个元素均除以向量的L2范数:
归一化(normalization)、标准化(standarization)_第5张图片
d) Logistic/Softmax变换
sigmoid/Softmax变化
https://blog.csdn.net/pipisorry/article/details/77816624

e)模糊量化模式

新数据=1/2+1/2sin[派3.1415/(极大值-极小值)*(X-(极大值-极小值)/2) ] X为原数据

6、说明

1)概率模型不需要归一化,因为这种模型不关系变量的取值,而是关心变量的分布和变量之间的条件概率
2)SVM、线性回归之类的最优化问题需要归一化,是否归一化主要在于是否关心变量取值
3)神经网络需要标准化处理,一般变量的取值在-1到1之间,这样做事为了弱化某些变量较大的值对模型产生的影响。一般神经网络中隐藏层采用tanh激活函数比sigmod激活函数要好一些,因为tanh双曲正切函数的取值[-1,1]之间,均值为0.
4)在K近邻算法中,如果不对解释变量进行标准化,那么具有较小数量级的解释变量的影响就会微乎其微。
5)线性归一化,不会消除量纲的影响,因为它是一种对原始数据的放缩(根据公式,应该不是等比例的放缩),这种放缩,可能会减小量纲的影响,比如一个量纲为1的特征和一个量纲为100的特征都归一化到0到1之间,差距就没有1到100那么大了,但量纲的不同的依然存在,也就是说,一定程度上减小了量纲的影响,但是还是不能消除;
所有的归一化方法都会在一定程度上消除量纲的影响,但是zscore还可以消除量纲对方差、协方差的影响(线性的会使方差也变化);
“数据分布一致,量纲就相同”,数据分布相同指完全一样的分布,如均值和方差相同的高斯分布,这时量纲是相同的;zscore会使数据分布都变成高斯分布。
6)python库的实现和调用:Scikit-learn(数据预处理
https://blog.csdn.net/pipisorry/article/details/52247679)

你可能感兴趣的:(机器学习)