特征归一化

2018-11-26  本文已影响0人  风清云淡Python

1、什么是特征归一化?

数据的标准化(normalization)是将数据按比例缩放,使之落入一个小的特定区间。在某些比较和评价的指标处理中经常会用到,去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权
其中最典型的就是数据的归一化处理,即将数据统一映射到[0,1]区间上。

2、为什么要进行特征归一化(必要性)?

(1)对数值类型的特征做归一化可以将所有的特征都统一到一个大致相同的数值区间内。
(2)从经验上说,归一化是让不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性

3、特征归一化的方法有哪些?

(1)线性函数归一化(Min-Max Scaling)(数据归一化)

tips : 适用于本来就分布在有限范围内的数据, 在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用第一种方法或其他归一化方法。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围。
它对原始数据进行线性变换,使结果映射到[0,1]的范围,实现对原始数据的等比缩放
归一化公式如下:

归一化公式

其中,X为原始数据 Xmax为原始数据的最大值 Xmin为原始数据的最小值

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)
print(b)

#输出:
[0.0, 0.16666666666666666, 0.0, 0.5, 0.3333333333333333, 0.16666666666666666, 0.6666666666666666, 0.8333333333333334, 0.16666666666666666, 1.0]

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

将原始数据归一化到[-1,1]
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)
print(b)
#输出
[-0.3833333333333333, -0.21666666666666665, -0.3833333333333333, 0.1166666666666667, -0.04999999999999997, -0.21666666666666665, 0.2833333333333334, 0.45, -0.21666666666666665, 0.6166666666666667]

(2)零均值归一化(Zero-Score Normalization)(数据标准化)

tip:在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,(Z-score standardization)表现更好
它会将原始数据映射到均值为0标准差为1的分布上(高斯分布/正态分布),假设原始特征的均值为μ、标准差为σ
那么归一化公式定义为:

归一化公式
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]
b=z_score(x)
print(b)
#输出:
[-0.57356608478803, -0.3241895261845386, -0.57356608478803, 0.17456359102244395, -0.07481296758104734, -0.3241895261845386, 0.42394014962593524, 0.6733167082294265, -0.3241895261845386, 0.9226932668329177]

4、特征归一化的好处?

(1)提升收敛速度

对于线性model来说,数据归一化后,最优解的寻优过程明显会变得平缓,更容易正确的收敛到最优解。

数据归一化对梯度下降收敛速度产生的影响
比较这两个图,左图对其进行优化时,会得到一个窄长的椭圆形,导致在梯度下降时,梯度的方向为垂直等高线的方向而走之字形路线,这样会使迭代很慢,相比之下,右图的迭代就会很快(理解:也就是步长走多走少方向总是对的,不会走偏)

(2)提升模型的精度

归一化的另一好处是提高精度,这在涉及到一些距离计算的算法时效果显著,比如算法要计算欧氏距离,上图中x2的取值范围比较小,涉及到距离计算时其对结果的影响远比x1带来的小,所以这就会造成精度的损失。所以归一化很有必要,他可以让各个特征对结果做出的贡献相同。
在多指标评价体系中,由于各评价指标的性质不同,通常具有不同的量纲和数量级。当各指标间的水平相差很大时,如果直接用原始指标值进行分析,就会突出数值较高的指标在综合分析中的作用,相对削弱数值水平较低指标的作用。因此,为了保证结果的可靠性,需要对原始指标数据进行标准化处理。
在数据分析之前,我们通常需要先将数据标准化(normalization),利用标准化后的数据进行数据分析。数据标准化也就是统计数据的指数化。数据标准化处理主要包括数据同趋化处理和无量纲化处理两个方面。数据同趋化处理主要解决不同性质数据问题,对不同性质指标直接加总不能正确反映不同作用力的综合结果,须先考虑改变逆指标数据性质,使所有指标对测评方案的作用力同趋化,再加总才能得出正确结果。数据无量纲化处理主要解决数据的可比性。经过上述标准化处理,原始数据均转换为无量纲化指标测评值,即各指标值都处于同一个数量级别上,可以进行综合测评分析。

image.png

(3)深度学习中数据归一化可以防止模型梯度爆炸。

总结:

数据归一化不是万能的,在实际应用中,通过梯度下降法求解的模型通常是需要数据归一化的,包括线性回归逻辑回归持向量机(SVM)神经网络等模型。
但是决策树模型并不适用归一化 ?????以后看到决策树再说

上一篇下一篇

猜你喜欢

热点阅读