您的位置:首页 > 其它

LDA线性判别分析

2017-04-19 18:00 183 查看
线性判别分析(Linear Discriminant Analysis)是一种经典的线性学习方法,在二分类问题上因为最早由Fisher提出,也称”Fisher判别分析”。

线性判别分析的思想朴素:给定训练数据集,设法将样本投影到直线上,使得同类样本的投影点尽可能接近、异类样本的投影点尽可能远离。在对新样本进行分类时,将其投影到同样的这条直线上,在根据投影点的位置来确定新样本的类别。

示意图如下:



给定训练数据集 T={(xi,yi)}mi=1,yi∈{0,1}.其中xi=(xi1,⋯,xin)T为列向量。假设X0,X1分别表示两种类别的集合,N0,N1分别表示两种类别的个数,则两种类别的均值如下:

μ0=1N0∑x∈X0x

μ1=1N1∑x∈X1x

对于向量w,向量x到w的投影可以表示为y=wTx。则投影后的均值表示为:

μ~0=1N0∑x∈X0wTx=wT1N0∑x∈X0x=wTμ0

同理,μ~1=wTμ1。投影后的均值也是均值的投影。

什么是最佳的直线呢?我们假设投影后的两类样本中心点尽量分离是最好的直线,定量表示为:

J(w)=|μ~0−μ~1|=|wT(μ0−μ1)|

J(w)越大越好。

但是只考虑J(w)是不行的,看下图。



投影到横轴上虽然中心点最远,但是两类样本存在重叠,投影到纵轴上,虽然距离短了,但是却可以分别出两种样本。因此,我们还要考虑样本的方差,方差越小,样本越难以分离。我们使用另一个度量值,称作散列值,对投影后的类求散列值,如下

s~2i=∑x~∈X~i(x~−μ~i)2=∑x∈Xi(wTx−wTμi)2

其中,X~i是Xi在w上的投影。

散列值的几何意义是样本点的密集程度,值越大,越分散,值越小,越集中。

把散列值公式展开,得到

s~2i=====∑x∈Xi(wTx−wTμi)2∑x∈Xi(wTx−wTμi)T(wTx−wTμi)∑x∈Xi(wTx−wTμi)(wTx−wTμi)T∑x∈XiwT(x−μi)(x−μi)TwwT∑x∈Xi(x−μi)(x−μi)Tw

因为(wTx−wTμi)T(wTx−wTμi)是一个实值,所以转置等于其本身。



Si=∑x∈Xi(x−μi)(x−μi)T,

这个矩阵和协方差矩阵只差一个常数倍,称为散列矩阵。

样本的协方差矩阵参见(协方差矩阵)

我们继续定义

Sw=S0+S1

则Sw称为”类内散度矩阵 (within-class sactter matrix)”。

则我们有

s~20+s~21=wT(S0+S1)w=wTSww。

然后,我们展开

(μ~0−μ~1)2===(wTμ0−wTμ1)T(wTμ0−wTμ1)(wTμ0−wTμ1)(wTμ0−wTμ1)TwT(μ0−μ1)(μ0−μ1)Tw

令Sb=(μ0−μ1)(μ0−μ1)T,

则Sb称为“类间散度矩阵(between-class scatter matrix)”。

则目标函数可以表示为

J(w)=wTSbwwTSww

这就是LDA欲最大化的目标,即Sb与Sw的”广义瑞利熵(generalized Rayleigh quotient)”。

如何求解w呢?注意到J(w)的分子和分母都是关于w的二次项,因此,其解和w的长度无关,只与其方向有关,不失一般性,令wTSww=1,得到

minw−wTSbw

s.t.wTSww=1.

由拉格朗日乘子法,假设f(w,λ)=wTSbw−λ(wTSww−1),则有

∂f∂w=2Sbw−2λSww=0

∂f∂λ=wTSww−1=0

上式等价于

Sbw=λSww

其中λ为拉格朗日乘子.

Sbw=(μ0−μ1)(μ0−μ1)Tw,其中(μ0−μ1)Tw为常数。所以,Sw的方向恒为μ0−μ1,不妨设

Sbw=λ(μ0−μ1),

得到

w=S−1w(μ0−μ1).

考虑到数值解的稳定性,在实践中,通常对Sw进行奇异值分解,即Sw=UΣVT,这里Σ是一个对角矩阵,对角线上的元素为Sw的奇异值,然后再由S−1w=VΣ−1UT,得到S−1w.

线性判别多分类

前面是针对的只有两个类的情况,假设类别变成多个,那么要怎么改变,才能保证投影后的类别能够分离呢?

我们之前讨论的是如何将n维降到一维,现在,假设存在N个类别,且第i个类别样本数为mi,则有:m=∑Ni=1mi。

假设需要K维向量来做投影。

将这K维向量表示为W=(w1,w2,⋯,wK)

我们将样本点在这K维向量投影后的结果表示为y=(y1,y2,⋯,yK)T,有以下公式成立

yi=wTix

y=WTx

接下来,我们定义多分类情况下下的类间散列度和类内散列度。

类内散列度矩阵定义Sw为每个类别的散列度矩阵之和,如下

Sw=∑Ni=1Swi

其中,

Swi=∑x∈Xi(x−μi)(x−μi)T

Sb需要改变,原来度量的是两个均值点的散列程度,现在度量的是每类均值点相对于样本中心的散列程度。类似于将μi看做第i类的中心点,μ看做总体样本的中心点,如果某类里面的样本点较多,那么其权重稍大,权重用mi/m,但由于J(w)对倍数不敏感,因此使用mi.

Sb=∑i=1Nmi(μi−μ)(μi−μ)T

其中,

μ=1m∑xx=1m∑Ni=1miμi

则投影到第k(k=1,2,…K)维可以表示为:

μ~i=1mi∑x∈XiwTkx

μ~=1m∑xwTkx

投影到第k维 的类内散度矩阵和类间散度矩阵分别为

S~w=∑Ni=1∑x∈Xi(wTkx−wTkμi)(wTkx−wTkμi)T

S~b=∑Ni=1mi(wTkμi−wTkμ)(wTkμi−wTkμ)T

综合各个投影向量w上的Sw,Sb,得到

S~W=WTSwW

S~B=WTSbW

W是基向量矩阵,SW~,SB~分别是投影后的类内散列度矩阵之和和各个类中心相对于全样本中心投影的类间散列度矩阵之和。

然而最后的J(W)的形式是

J(W)=SB~SW~=|WTSbW||WTSwW|

由于分子分母都是散列度矩阵,要将矩阵变为实数,需要取行列式。

固定分母为1,然后求导,得到SbW=λSwW,

得到W的闭式解是S−1wSb的N-1个最大广义特征值所对应的的特征向量组成的矩阵。

另一种推导的方式。

假设存在N个类别,且第i类的样本数为Ni,我们定义“全局散度矩阵”

St=Sb+Sw=∑mi=1(xi−μ)(xi−μ)T

其中,μ为所有样本的均值。

类内散度矩阵 Sw定义为每个类别的散度矩阵的

Sw=∑Ni=1Swi,

其中Swi=∑x∈Xi(x−μi)(x−μi)T.

则类间散度定义为

Sb=St−Sw

=∑mi=1(xi−μ)(xi−μ)T−∑Ni=1∑x∈Xi(x−μi)(x−μi)T

=∑Ni=1∑x∈Xi(x−μ)(x−μ)T−∑Ni=1∑x∈Xi(x−μi)(x−μi)T

=∑Ni=1∑x∈Xi[(x−μ)(x−μ)T−(x−μi)(x−μi)T]

=∑Ni=1∑x∈Xi[x(μTi−μ)+(μi−μ)xT+(μμT−μiμTi)]

=∑Ni=1[Niμi(μTi−μ)+Ni(μi−μ)μTi+Ni((μμT−μiμTi)]

=∑Ni=1Ni(μi−μ)(μi−μ)T.

后面的步骤和上面类似。

参考文档:

线性判别分析(Linear Discriminant Analysis)

《机器学习》周志华
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息