机器学习-数据归一化方法(Normalization Method)

出现背景:

 

从左至右来看,第一个模型是一个线性模型,拟合度很低,也称作欠拟合(Underfitting),不能很好地适应我们的训练集;第三个模型是一个高次方的模型,属于过度拟合,虽然能很好的适应我们的训练数据集,但是在新输入变量进行预测的时候,可能效果会很差。第二个模型可能是刚刚适合我们数据的模型。

那么问题来了,如果我们发现这样过度拟合的情况,如何处理呢?

有两种方式:

1.丢弃一些不能帮助我们正确预测的特征。采用的方法如下:

  •  手工选择保留哪些特征。
  • 使用一些模型选择算法来帮忙降维。(例如PCA等)

2.归一化处理

  •  保留所有的特征,但是减少参数的大小(或者是说:减少参数的重要性)

定义:

不同的评价指标往往具有不同的量纲(例如:对于评价房价来说量纲指:面积、房价数、楼层等;对于预测某个人患病率来说量纲指:身高、体重等。)和量纲单位(例如:面积单位:平方米、平方厘米等;身高:米、厘米等),这样的情况会影响到数据分析的结果,为了消除指标之间量纲的影响,需要进行数据标准化处理,已解决数据指标之间的可比性。原始数据经过数据标准化处理后,各指标处于同一数量级,适合进行综合对比评价。

优点:

(1)归一化后加快了梯度下降求最优解的速度。

(2)归一化有可能提高精度(归一化是让不同维度之间的特征在数值上有一定的比较性)。

解释(1)加快梯度下降求最优解的速度:

例子:假定为了预测房子价格,自变量为面积,房间数两个,因变量为房价。

那么可以得到的公式为:

 

首先我们给出两张图代表数据是否均一化的最优解寻解过程。

 

未归一化:

 

归一化之后:

 

我们在寻找最优解的过程中也就是在使得损失函数值最小的theta1、theta2。上述两幅图代表的是损失函数的等高线。我们很容易看出,当数据没有归一化的时候,面积数的范围可以从0-1000,房间数的范围一般为0-10,可以看出面积数的取值范围远大于房间数。

归一化和没有归一化的影响:

这样造成的影响就是在形成损失函数的时候:

数据没有归一化的表达试可以为:

 

造成图像的等高线为类似的椭圆形状,最优解的寻优过程如下图所示:

 

 

而数据归一化后,损失函数的表达式可以表示为:

 

其中变量的前面系数都在【0-1】范围之间,则图像的等高线为类似的圆形形状,最优解的寻优过程如下图所示:

 

从上面可以看出,数据归一化后,最优解的寻优过程明显会变得平缓,更容易正确的收敛到最优解。

 

解释:(2)归一化有可能提高精度(归一化是让不同维度之间的特征在数值上有一定的比较性)。

 

一些分类器需要计算样本之间的距离(如欧式距离),例如KNN。如果一个特征值域范围非常大,那么距离计算就主要取决于这个特征,从而与实际情况不符。(比如,这时实际情况是值域范围小的特征更重要)

两种常用的归一化方法:

(1)min-max标准化

(2)Z-score标准化方法

min-max标准化(Min-Max Normalization)(线性函数归一化)

  • 定义:也称为离差标准化,是对原始数据的线性变换,使得结果映射到0-1之间。
  • 本质:把数变为【0,1】之间的小数。
  • 转换函数:(X-Min)/(Max-Min)
  • 如果想要将数据映射到-1,1,则将公式换成:(X-Mean)/(Max-Min)

其中:max为样本数据的最大值,min为样本数据的最小值,Mean表示数据的均值。

缺陷:当有新数据加入时,可导致max和min的变化,需要重新定义。

0均值标准化(Z-score standardization)

  • 定义:这种方法给与原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。经过处理的数据符合标准正态分布,即均值为0,标准差为1.
  • 本质:把有量纲表达式变成无量纲表达式。
  • 转换函数:(X-Mean)/(Standard deviation)

其中,Mean为所有样本数据的均值。Standard deviation为所有样本数据的标准差。

两种归一化方法的使用场景:

(1)在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,第二种方法(Z-score standardization)表现更好。

因为:第一种方法(线性变换后),其协方差产生了倍数值的缩放,因此这种方式无法消除量纲对方差、协方差的影响,对PCA分析影响巨大;同时,由于量纲的存在,使用不同的量纲、距离的计算结果会不同。

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

因为:第二种归一化方式中,新的数据由于对方差进行了归一化,这时候每个维度的量纲其实已经等价了,每个维度都服从均值为0、方差1的正态分布,在计算距离的时候,每个维度都是去量纲化的,避免了不同量纲的选取对距离计算产生的巨大影响。

 

为什么在距离度量计算相似性、PCA中使用第二种方法(Z-score standardization)会更好呢?我们进行了以下的推导分析:

 

归一化方法对方差、协方差的影响:假设我们数据为2个维度(X、Y),首先看均值为0对方差、协方差的影响:

我们使用Z-score标准化进行计算,我们先不做方差归一化,只做0均值化为:

 

新数据的协方差为:

 

由于

 

 

因此:

 

而原始数据协方差为:

 

因此:

做方差归一化后:

                 

 

 

方差归一化后的协方差为:

 

使用Min-Max标准化方法进行计算,为了方便分析,我们只对X维进行线性函数变换

 

计算协方差:

 

总结:

使用Max-Min标准化后,其协方差产生了倍数值得缩放,因此这种方式无法消除量纲对方差、协方差的影响,对PCA分析影响巨大;同时由于量纲的存在,使用不同的量纲,距离的计算结果会不同。

在Z-score标准化(0均值标准化)中,新的数据由于对方差进行了归一化,这时候每个维度的量纲其实已经等价了,每个维度都服从均值为0、方差为1的正态分布,在计算距离的时候,每个维度都是去量纲化的,避免了不同量纲的选取对距离计算产生的巨大影响。

总的来说,在算法、后续计算中,涉及距离度量(聚类分析)或者协方差分析(PCA、LDA等)的,同时数据分布可以近似为状态分布,应当使用0均值化的归一方法。其它应用中,根据具体情况选用合适的归一化方法。

 

归一化后有两个好处

1. 提升模型的收敛速度

如下图,x1的取值为0-2000,而x2的取值为1-5,假如只有这两个特征,对其进行优化时,会得到一个窄长的椭圆形,导致在梯度下降时,梯度的方向为垂直等高线的方向而走之字形路线,这样会使迭代很慢,相比之下,右图的迭代就会很快(理解:也就是步长走多走少方向总是对的,不会走偏)

机器学习-数据归一化方法(Normalization Method)_第1张图片
2.提升模型的精度

归一化的另一好处是提高精度,这在涉及到一些距离计算的算法时效果显著,比如算法要计算欧氏距离,上图中X2的取值范围比较小,涉及到距离计算时其对结果的影响远比X1带来的小,所以这就会造成精度的损失。所以归一化很有必要,他可以让各个特征对结果做出的贡献相同。

    在多指标评价体系中,由于各评价指标的性质不同,通常具有不同的量纲和数量级。当各指标间的水平相差很大时,如果直接用原始指标值进行分析,就会突出数值较高的指标在综合分析中的作用,相对削弱数值水平较低指标的作用。因此,为了保证结果的可靠性,需要对原始指标数据进行标准化处理。

    在数据分析之前,我们通常需要先将数据标准化(normalization),利用标准化后的数据进行数据分析。数据标准化也就是统计数据的指数化。数据标准化处理主要包括数据同趋化处理和无量纲化处理两个方面。数据同趋化处理主要解决不同性质数据问题,对不同性质指标直接加总不能正确反映不同作用力的综合结果,须先考虑改变逆指标数据性质,使所有指标对测评方案的作用力同趋化,再加总才能得出正确结果。数据无量纲化处理主要解决数据的可比性。经过上述标准化处理,原始数据均转换为无量纲化指标测评值,即各指标值都处于同一个数量级别上,可以进行综合测评分析。

从经验上说,归一化是让不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性。

数据需要归一化的机器学习算法

需要归一化的模型:

        有些模型在各个维度进行不均匀伸缩后,最优解与原来不等价,例如SVM(距离分界面远的也拉近了,支持向量变多?)。对于这样的模型,除非本来各维数据的分布范围就比较接近,否则必须进行标准化,以免模型参数被分布范围较大或较小的数据dominate。
        有些模型在各个维度进行不均匀伸缩后,最优解与原来等价,例如logistic regression(因为θ的大小本来就自学习出不同的feature的重要性吧?)。对于这样的模型,是否标准化理论上不会改变最优解。但是,由于实际求解往往使用迭代算法,如果目标函数的形状太“扁”,迭代算法可能收敛得很慢甚至不收敛。所以对于具有伸缩不变性的模型,最好也进行数据标准化。

不需要归一化的模型:

        ICA好像不需要归一化(因为独立成分如果归一化了就不独立了?)。

       基于平方损失的最小二乘法OLS不需要归一化。

[线性回归与特征归一化(feature scaling)]

 

常见的数据归一化方法

min-max标准化(Min-max normalization)/0-1标准化(0-1 normalization)

也叫离差标准化,是对原始数据的线性变换,使结果落到[0,1]区间,转换函数如下:

其中max为样本数据的最大值,min为样本数据的最小值。

def Normalization(x):
    return [(float(i)-min(x))/float(max(x)-min(x)) for i in x]

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

x∗=x−xmeanxmax−xmin

x_mean表示数据的均值。

def Normalization2(x):
    return [(float(i)-np.mean(x))/(max(x)-min(x)) for i in x]

这种方法有一个缺陷就是当有新数据加入时,可能导致max和min的变化,需要重新定义。

log函数转换

通过以10为底的log函数转换的方法同样可以实现归一下,具体方法如下:

看了下网上很多介绍都是x*=log10(x),其实是有问题的,这个结果并非一定落到[0,1]区间上,应该还要除以log10(max),max为样本数据最大值,并且所有的数据都要大于等于1。

atan函数转换

用反正切函数也可以实现数据的归一化。

使用这个方法需要注意的是如果想映射的区间为[0,1],则数据都应该大于等于0,小于0的数据将被映射到[-1,0]区间上,而并非所有数据标准化的结果都映射到[0,1]区间上。

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

最常见的标准化方法就是Z标准化,也是SPSS中最为常用的标准化方法,spss默认的标准化方法就是z-score标准化。

也叫标准差标准化,这种方法给予原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。

经过处理的数据符合标准正态分布,即均值为0,标准差为1,其转化函数为:

x∗=x−μσ

其中μ为所有样本数据的均值,σ为所有样本数据的标准差。

z-score标准化方法适用于属性A的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况。

标准化的公式很简单,步骤如下

  1.求出各变量(指标)的算术平均值(数学期望)xi和标准差si ;
  2.进行标准化处理:
       zij=(xij-xi)/si
  其中:zij为标准化后的变量值;xij为实际变量值。
  3.将逆指标前的正负号对调。
  标准化后的变量值围绕0上下波动,大于0说明高于平均水平,小于0说明低于平均水平。

def z_score(x, axis):
    x = np.array(x).astype(float)
    xr = np.rollaxis(x, axis=axis)
    xr -= np.mean(x, axis=axis)
    xr /= np.std(x, axis=axis)
    # print(x)
    return x

为什么z-score 标准化后的数据标准差为1?

x-μ只改变均值,标准差不变,所以均值变为0

(x-μ)/σ只会使标准差除以σ倍,所以标准差变为1

 

Decimal scaling小数定标标准化

这种方法通过移动数据的小数点位置来进行标准化。小数点移动多少位取决于属性A的取值中的最大绝对值。

将属性A的原始值x使用decimal scaling标准化到x'的计算方法是:
x'=x/(10^j)
其中,j是满足条件的最小整数。
例如 假定A的值由-986到917,A的最大绝对值为986,为使用小数定标标准化,我们用每个值除以1000(即,j=3),这样,-986被规范化为-0.986。
注意,标准化会对原始数据做出改变,因此需要保存所使用的标准化方法的参数,以便对后续的数据进行统一的标准化。

Logistic/Softmax变换

logistic函数和标准正态函数

新数据=1/(1+e^(-原数据))

 

P(i)=11+exp(−θTix)

 

这个函数的作用就是使得P(i)在负无穷到0的区间趋向于0,在0到正无穷的区间趋向于1。同样,函数(包括下面的softmax)加入了e的幂函数正是为了两极化:正样本的结果将趋近于1,而负样本的结果趋近于0。这样为多类别分类提供了方便(可以把P(i)看作是样本属于类别i的概率)。

 

logit(P) = log(P / (1-P)) = a + b*x 以及 probit(P) = a + b*x

这两个连接函数的性质使得P的取值被放大到整个实数轴上。

事实上可以把上面的公式改写一下:

P = exp(a + b*x) / (1 + exp(a + b*x)) 或者 P = pnorm(a + b*x)(这个是标准正态分布的分布函数)

 

 

 

Note: 上半部分图形显示了概率P随着自变量变化而变化的情况,下半部分图形显示了这种变化的速度的变化。可以看得出来,概率P与自变量仍然存在或多或少的线性关系,主要是在头尾两端被连接函数扭曲了,从而实现了[0,1]限制。同时,自变量取值靠近中间的时候,概率P变化比较快,自变量取值靠近两端的时候,概率P基本不再变化。这就跟我们的直观理解相符合了,似乎是某种边际效用递减的特点。

[logistic回归的一些直观理解(1.连接函数 logit probit)]

Softmax函数

是logistic函数的一种泛化,Softmax是一种形如下式的函数:

 

假设我们有一个数组,V,Vi表示V中的第i个元素,那么这个元素的Softmax值就是

也就是说,是该元素的指数,与所有元素指数和的比值

为什么要取指数,第一个原因是要模拟 max 的行为,所以要让大的更大。第二个原因是需要一个可导的函数。

通过softmax函数,可以使得P(i)的范围在[0,1]之间。在回归和分类问题中,通常θ是待求参数,通过寻找使得P(i)最大的θi作为最佳参数。

此外Softmax函数同样可用于非线性估计,此时参数θ可根据现实意义使用其他列向量替代。

Softmax函数得到的是一个[0,1]之间的值,且∑Kk=1P(i)=1,这个softmax求出的概率就是真正的概率,换句话说,这个概率等于期望。

[Softmax 函数及其作用(含推导) ]

[Machine Learning - VI. Logistic Regression逻辑回归 (Week 3) ]

 

模糊量化模式

 

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

 

参考文献:http://blog.csdn.net/yehui_qy/article/details/53787386

                http://blog.csdn.net/zbc1090549839/article/details/44103801

               知乎:处理数据时不进行归一化会有什么影响?归一化的作用是什么?什么时候需要归一化?有哪些归一化的方法? - 忆臻的回答 - 知乎
               https://www.zhihu.com/question/20455227/answer/197897298

               http://blog.csdn.net/mysteryhaohao/article/details/51261300

你可能感兴趣的:(人工智能,人工智能,数据归一化方法)