Skip to content

特征归一化特性及其数学原理推导

买了本《百面机器学习》看着玩,虽然已经毕业了,机器学习还是放不下吧,希望以后新的机会出现能够及时抓住。书中第一章「特征工程」的“01 特征归一化”(第002-003页)提到:

对数值类型的特征做归一化可以将所有的特征都统一到一个大致相同的数值区间内。最常用的方法主要有以下两种。

  1. 线性函数归一化(Min-Max Scaling)。它对原始数据进行线性变换,使结果映射到[0,1]的范围,实现对原始数据的等比缩放。归一化公式如下:
Xnorm=XXminXmaxXmin

其中,X为原始数据,XmaxXmin分别为数据最大值和最小值。

  1. 零均值归一化(Z-Score Normalization)。它会将原始数据映射到均值为0、标准差为1的分布上。具体来说,假设原始特征的均值为μ、标准差为σ,那么归一化公式定义为:
z=xμσ

我平时使用的全是线性函数归一化……因为比较简单也好理解。零均值归一化看到过,但是不知道该用在哪里,接下来仔细地分析一下相关的内容,以及感兴趣的数学知识。

为什么需要对数值类型的特征做归一化?

这是《百面》提出的问题。官方解答是通过一个形象的随机梯度下降例子:

假设有两种数值型特征,x1的取值范围为[0,10]x2的取值范围为[0,3],于是可以构造一个目标函数符合图1.1(a)中的等值图。在学习速率相同的情况下,x1的更新速度会大于x2,需要较多的迭代才能找到最优解。如果将x1x2归一化到相同的数值区间后,优化目标的等值图会变成图1.1(b)中的圆形,x1x2的更新速度变得更为一致,容易更快地通过梯度下降找到最优解。 fa8932b18056001344271cbae6d451ac.png

用人话来讲就是,归一化使得特征的变化更容易用统一标准去衡量了。

这个例子其实来源于斯坦福机器学习公开课的一节,课题是我们想要去预测房价,假设存在这样一个函数:

y=θ1x1+θ2x2

注意这里的x1是真实的变量,而《百面》中提到的x1是这里的参数θ1(估计是为了避嫌更换了名称),把θ称作参数更符合思维习惯。

这个函数里的y是预测房价,x1是房间大小(1~100平方米),x2是房间数量(1~4间)。我们都知道房间越多、房间越大,房子越值钱,但不知道具体“50平方米2间房”和“60平方米1间房”哪个更值钱。所以现在有一批[房间大小, 房间数量, 房价]的训练数据,我们用这批数据去求得使得大部分数据都符合这个公式的参数θ1θ2,不就得到房价预测模型了吗?以后输入房间大小、房间数量,代入公式,就得到了预测房价。那么“大部分都符合”这个标准用数学量化出来就是损失函数最小命题转变为了求解使得损失函数最小的参数θ1θ2

损失函数很容易定义为预测房价和真实房价差值的平方(为了取正数):

J(θ1,θ2)=(θ1x1+θ2x2yreal)2

损失函数值越小,说明预测房价和真实房价的差距越小,预测越精准。

可以想象的是,当没有归一化的时候,x1=50x2=2yreal=100,我们可以取150+252100,也可以取0.250+452100,他们的值都是0,然而θ1的取值范围波动会小一些,θ2的取值范围波动巨大,如果画出等值线,就会是θ1进行缓慢地变化、θ2剧烈变化的椭圆;当归一化之后,x1=0.5x2=0.5yreal=1,那么取值10.5+10.51,或者00.5+20.51,会发现参数变化更加均匀一些了,等值线(等高线)也就越趋近于圆。

所以,用原始的量纲不同、取值范围差异较大的两个特征,去进行梯度下降寻找最优解,未归一化的话这个圆会变得很尖,归一化了圆就会更圆,但程序不知道啊,它会通过梯度下降去迭代,未归一化的数据更容易产生“之”字型走法来迭代寻找最优解,归一化的数据更容易走直线快速找到最优解。

但这只是讲了归一化的好处——提升模型收敛速度,并没有讲不归一化会发生什么。不归一化的最大坏处在于——数值小的特征变化失去意义,举个例子(我以前就干过这样的事……):

我们已知平面上有很多点(x,y),现在取一个点(x0,y0)=(0,0),找出和它最近的2个点。x的取值范围是[1,1],y的取值范围是[1000,1000]

text
(0.1,100)
(0.2,300)
(0.2,100)
(0.3,300)

我们会发现,当计算距离的时候,y的取值很大程度地影响了距离的值,y稍微一变化,距离就变化很大。x重要吗?根本不重要!完全和已知在纵轴上,y0=0,寻找最近的2个点的命题几乎一样:

text
y1=100
y2=300
y3=100
y4=300

最近的仍然是y1y3,哪怕你有一个(x5,y5)=(1,300)x变化再剧烈,最近邻也轮不到你。效果就是,x这个特征似乎消失了。

所以,归一化在维数非常多的时候,可以防止某一维或某几维对数据影响过大。

归一化和标准化的取舍

虽然可以统称为归一化,但是我更愿意称线性函数归一化(Min-Max Scaling)为极大极小归一化(Min-Max Normalization),称零均值归一化(Z-Score Normalization)为零均值标准化(Z-Score Standardization)。

因为极大极小归一化的方法是,根据极值,将所有内部值压缩到[0,1]区间;而零均值标准化做的是,根据所有数值,将分布转为标准正态分布,均值为0,方差为1,取值[1,1]。在实际使用过程中深有体会,当用极大极小归一化时,如果不是已经知道极值(比如0~255),一旦有新的数据(比如Haar特征)加入,根据固定的极值(当前数据最大最小值)去压缩,就可能产生超过1或者小于0的特征值,但是在处理上会方便许多;采用零均值标准化的话,由于可能取到负值,而且新进来的数据依然可能越界,其实都不好使……

那么,应该如何取舍归一化和标准化呢?

  1. 如果对输出结果有要求,或者数据比较稳定,用归一化。

  2. 如果存在一些异常值和噪音,数据符合正态分布,用标准化。

  3. 如果涉及距离度量计算相似性(比如KNN、Kmeans聚类)、或者PCA,用标准化。

前面两个都好理解,数据稳定,用极值方便;有异常或噪音,用标准化保证整体数值分布。我们来仔细分析一下第三点,首先推导零均值标准化原理。

正态分布的期望从定义开始推导

正态分布也叫高斯分布,期望有很多种推导方式,比如极坐标这种很秀的推导方法,我们只记最简单的Γ函数推导就好了。

1) 推导E(x)到合适的地方

已知一般正态分布:

XN(μ,σ2)

其概率密度函数为:

f(x)=1σ2πe(xμ)22σ2

根据期望的定义有:

E(X)=+xf(x)dx=+x1σ2πe(xμ)22σ2dx

换元积分,令:

z=xμσ,x=σz+μ

E(x)可以改写为:

E(X)=+(σz+μ)1σ2πez22d(σz+μ)=+(σz+μ)12πez22dz=12π+(σz+μ)ez22dz=σ2π+zez22dz+μ2π+ez22dz

左式为奇函数在对称区间的积分,积分为0,而右边是偶函数在对称区间的积分,积分为2倍半区间积分,于是:

E(X)=0+2μ2π0+ez22dz

2) 推导Γ函数的特性

注意到含参变量的以无穷乘积函数定义的反常积分Γ函数定义为:

Γ(s)=0+xs1exdx,s>0

分部积分法(其公式不再继续往下证明)有:

u(x)v(x)dx=u(x)v(x)u(x)v(x)dx0Axsexdx=xsex|0A+s0Axs1exdx=AseA+s0Axs1exdx

那么,令:

A+

得到Γ函数的递推公式及其推论:

Γ(s+1)=sΓ(s)Γ(1)=1Γ(12)=π

3) 利用Γ函数的特性

所以,对E(X)再次换元:

t=z22z2=2tz=2tdz=22tdt

有:

E(X)=0+2μ2π0+et22tdt=μπ0+t12etdt=μπ0+t121etdt=μπΓ(12)=μ

正态分布的方差从定义开始推导

1) 推导D(x)到合适的地方

D(X)=+(xμ)2f(x)dx=+(xμ)21σ2πe(xμ)22σ2dx

同样地,进行换元,令:

z=xμσ,x=σz+μ

利用分部积分法,有:

D(X)=+σ2z212πez22dz=σ22π+z2ez22dz=σ22π+z(zez22)dz=σ22π(z(ez22)|++(ez22)dz)=σ22π(zez22|+++ez22dz)

注意这里分部积分法的使用,是拆开了前面的平方,组合后面的。而且没有用网上所谓的“注意到”:

(zez22)=zez22+z2ez22

虽然和分部积分法原理一样,但是除非非常熟练,看到这个积分就能想到这个导数,否则以我的视角根本不可能去“注意到”。还是分部积分法靠谱一些。

2) 利用Γ函数特性

采用的推导方案
D(X)=σ22π(0+222π)=σ22π2π=σ2
方案2: 利用方差和期望的关系

第二种推导方案是利用:

D(X)=E(X2)E(X)2

来进行推导。

方案3: 利用洛必达

第三种推导方案是,不使用奇函数特性,使用洛必达法则推导;不使用Γ函数特性,使用双重积分+极坐标推导。

方案4: 利用Γ函数特性

第四种推导方案是,不使用分部积分法,使用一种新奇的换元方法+Γ函数特性:

t=z2

这里不再赘述。

为什么零均值标准化能使得均值为0方差为1

即需要证明:XN(μ,σ),则Z=(Xμ/σ)N(0,1)

我们知道,分布函数F(x)、概率密度f(x)存在这样的关系:

F(x)=P(Xx)=xf(x)dx,<x<+F(x)=f(x)

那么:

FZ(z)=P(Z<z)=P(Xμσ<z)=P(X<σz+μ)=σz+μ1σ2πe(xμ)22σ2dx=令 x=σv+μz1σ2πe(σv+μμ)22σ2σdv=z12πev22dv

所以,Z=(Xμ/σ)N(0,1)

为什么零均值标准化适合于距离度量、PCA

PCA原理不再介绍,我们知道PCA的核心就是方差与协方差。原始特征样本协方差为(N-1是无偏估计,'表示区分不是表示导数):

σxy=1N1i=1N(xix¯)(yiy¯)

那么,使用零均值标准化:

x=xx¯σx,x¯=0y=yy¯σy,y¯=0σxy=1N1i=1N(xix¯)(yix¯)=1N1i=1N(xi0)(yi0)=1N1i=1N(xix¯σx)(yiy¯σy)=1(N1)σxσyi=1N(xix¯)(yiy¯)=σxyσxσy

而使用极大极小归一化:

x=cxx+mxy=cyy+myσxy=1N1i=1N(xixi)(yixi)=1N1i=1N(cxxicxxi)(cyyicyyi)=cxcyσxy

极大极小归一化使得协方差产生了倍数值缩放,无法消除量纲的影响;而零均值标准化对方差进行了归一化,使得量纲不会对协方差的计算产生任何影响。

所以,如果需要每个特征值都对整体归一化产生一定影响的话(和分布相关的话),选择零均值归一化。

特征归一化的使用范围

《百面》上说:

在实际应用中,通过梯度下降法求解的模型通常是需要归一化的,包括线性回归、逻辑回归、支持向量机、神经网络等模型。但对于决策树模型则并不适用,以C4.5决策树为例,决策树在进行节点分裂时主要依据数据集D关于特征x的信息增益比,而信息增益比跟特征是否进行归一化是无关的,因为归一化并不会改变样本在特征x上的信息增益。

但其实,看一下C4.5的信息增益比公式,样本集合D,类别数N,某类样本子集CiDi中属于第n类的子集Din,特征取值数K||表示取元素个数,某特征X,其信息增益比为:

GainRatio(D,X)=Gain(D,X)Split(D,X)=H(D)H(D|X)Split(D,X)=i=1N|Ci||D|log2(|Ci||D|)i=1K|Di||D|(i=1N|Din||Di|log2(|Din||Di|))i=1K|Di||D|log2(|Di||D|)

信息增益比相当于帮决策树进行了归一化。而且其实,决策树使用了归一化,也不会有太大的问题。

总结

除了极大极小归一化、零均值归一化,还有一些非线性的归一化,比如log10log2tan等。归一化的好处真的非常之大,是机器学习入门必备的概念。

这里通过一些数学推导把以前原理模糊的概念都理解透彻了,由于涉及到较多的数学,如有错误还望指正。

转载请注明出处https://bananaoven.com/articles/216.html | 香蕉微波炉
分享许可方式知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议
重大发现:转载注明原文网址的同学刚买了彩票就中奖,刚写完代码就跑通,刚转身就遇到了真爱。