线性判别分析(Linear Discriminant Analysis)是一种经典的线性学习方法,在二分类问题上因为最早由Fisher提出,也称”Fisher判别分析”。
线性判别分析的思想朴素:给定训练数据集,设法将样本投影到直线上,使得同类样本的投影点尽可能接近、异类样本的投影点尽可能远离。在对新样本进行分类时,将其投影到同样的这条直线上,在根据投影点的位置来确定新样本的类别。
示意图如下:
给定训练数据集
T={(xi,yi)}mi=1
,
yi∈{0,1}
.其中
xi=(xi1,⋯,xin)T
为列向量。假设
X0,X1
分别表示两种类别的集合,
N0,N1
分别表示两种类别的个数,则两种类别的均值如下:
对于向量 w ,向量
同理, μ~1=wTμ1 。投影后的均值也是均值的投影。
什么是最佳的直线呢?我们假设投影后的两类样本中心点尽量分离是最好的直线,定量表示为:
J(w) 越大越好。
但是只考虑 J(w) 是不行的,看下图。
投影到横轴上虽然中心点最远,但是两类样本存在重叠,投影到纵轴上,虽然距离短了,但是却可以分别出两种样本。因此,我们还要考虑样本的方差,方差越小,样本越难以分离。我们使用另一个度量值,称作散列值,对投影后的类求散列值,如下
其中, X~i 是 Xi 在w上的投影。
散列值的几何意义是样本点的密集程度,值越大,越分散,值越小,越集中。
把散列值公式展开,得到
因为
(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
。
然后,我们展开
令
Sb=(μ0−μ1)(μ0−μ1)T
,
则
Sb
称为“类间散度矩阵(between-class scatter matrix)”。
则目标函数可以表示为
这就是LDA欲最大化的目标,即 Sb 与 Sw 的”广义瑞利熵(generalized Rayleigh quotient)”。
如何求解 w 呢?注意到
minw−wTSbw
s.t.wTSww=1 .
由拉格朗日乘子法,假设 f(w,λ)=wTSbw−λ(wTSww−1) ,则有
上式等价于
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
个类别样本数为
假设需要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
.
其中,
μ=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 的闭式解是
另一种推导的方式。
假设存在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)
《机器学习》周志华