注意:在不加说明的情况下,本文所有公式的向量均是列向量
基本概念#
线性判别分析既是一种分类算法,也是一种降维方法,和PCA一样,LDA也是通过投影的方式达到去除数据之间冗余的一种算法。其基本想法是找到一个向量 w ,使所有样本投影到 w 上之后类别间距离最大。
正交投影#
已知:
p=cwd=x−p计算 x 在 w 上的投影 p :
dT⋅p(x−p)T⋅p(x−cw)T⋅cwcxTw−c2wTwcp=0=0=0=0=wTwwTx=cw=(wTwwTx)w假设 w 是一个单位向量, 即 wTw=1 , 对于一个数据集 X={x1,x2,⋯,xm},其中 xi 是 d 维列向量,其在 w 上的投影 xi^ 可以表示为
xi^=(wTx)w=aiw其中 ai 是一个常数, 叫做 xi 在 w 上的坐标或者偏移。
这一系列的值 {a1,a2,⋯,am} 表示了一个映射:Rd→R ,即通过投影,我们将 d 维向量降维到了1维
数据集的假设#
为了简化问题和可视化结果,我们假设数据集中只有2个目标类和2个特征,可做出如下假设:
xi∈Rd,where d=2 Di={xj∣yj=ci}其中 Di 是 所有类别为 ci 的样本的集合。
投影数据的均值#
所有数据 xi 投影到 w 上之后,计算 Di 中投影数据的均值:
mi=ni1xj∈Di∑ai=ni1xj∈Di∑wTxj=wT(ni1xj∈Di∑xj)=wTμi其中 μi 是 Di 中所有输入数据的均值向量
两个重要想法#
为了在投影空间最大化类间距离,我们可以想到需要最大化投影均值之差 ∣m1−m2∣,但仅凭这个条件还不足以确保在投影空间中找到最好分割,我们需要考虑投影数据的类内方差,过大的类内方差会导致不同类的数据之间产生重叠,所以我们需要同时最小化类内方差。
但是 LDA 没有直接使用方差,而是使用总平方偏差,即没取平均的方差:
si2=xj∈Di∑(aj−mi)2Fisher’s LDA#
Fisher提出了一个思想:最⼤化⼀个函数,这个函数能够让类均值的投影分开得较大,同时让每个类别内部的方差较小,从而最小化了类别的重叠。这个函数被叫做 Fisher’s LDA:
wmax J(w)=s12+s22(m1−m2)2重写上述公式:
(m1−m2)2 si2 s12+s22 wmaxJ(w)=(wTμ1−wTμ2)2=[wT(μ1−μ2)]2=[wT(μ1−μ2)][wT(μ1−μ2)]T=wT(μ1−μ2)(μ1−μ2)Tw=wTSBw=xj∈Di∑(aj−mi)2=xj∈Di∑(wTxj−wTμi)2=xj∈Di∑[wT(xj−μi)]2=wT(xj∈Di∑(xj−μi)(xj−μi)T)w=wTSiw=wTS1w+wTS2w=wT(S1+S2)w=wTSWw=wTSWwwTSBw对目标优化函数求导:
dwdJ(w)=(wTSWw)2(2SBw)(wTSWw)−(2SWw)(wTSBw)可知使 J(w) 取最大值的条件是:
SBw(wTSWw)⇒SBw⇒SBw⇒SBw=SWw(wTSBw)=SWw(wTSWwwTSBw)=J(w)SWw=λSWw其中 λ=J(w) ,是一个常量
如果 S 是一个非奇异矩阵,那么上式两边同时左乘 SW−1 可得:
SW−1SBw=λw最终,LDA问题其实就是求 SW−1SB 对应最大特征值,而我们前面要求的投影方向就是最大特征值对应的特征向量,我们将LDA问题化成了矩阵的特征值和特征向量的问题了。
多分类LDA#
上述推导针对的是二分类问题,对于多分类问题, SW 的计算方式不变,而 SB 矩阵需要采用如下的公式计算:
SB=i=1∑Cni(μi−μ)(μi−μ)T其中 C 表示类别数;ni 表示第i类中样本个数,μi表示第i类样本的均值;μ 表示整个样本的均值。