线性判别式算法(LDA)
LDA算法和PCA算法都是一种数据压缩的算法,由于前者属于无监督学习而后者属于监督学习,根据任务的不同,因而它们的侧重点不同,PCA算法关心的是原数据与新数据之间的最小重构误差,而LDA算法关注的是数据压缩后类别间的区分度。
![[监督学习]线性判别式分析(LDA) [监督学习]线性判别式分析(LDA)](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzk1MC80NDUwNzZmYzBkZmY3YjMzYTAzZDE3OWJkNGYxZDRhNi5wbmc=)
从上图中可以看出,LDA算法希望找到一个投影的方向,使得类别间中心点尽可能分散,而每一类的样本尽可能聚集,如果说PCA算法的优化准则是最小重构误差,则LDA的准则就是最小化类内方差、最大化类间均值。
那我们该如何去选择这个投影方向呢?我们不妨先从数学原理出发。
假设样本数据共分为 K 类,每一类的样本数目分别为 N1,N2,⋯,NK ,设 xk1,xk2,⋯,xkNk 分别为第 k 类的样本。对于任何一个样本 x ,设 x 为 x 投影后的样本点。
![[监督学习]线性判别式分析(LDA) [监督学习]线性判别式分析(LDA)](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzg3Ni8yYTBmMzg2NTM3Yzg2YTY4NWU2NTM5NGZiOTdhMzMxYy5KUEVH)
则有 x=<x,u>u=(xTu)u 。
如何描述类内方差?
我们接下来首先去描述投影后的第 k 类样本的方差。
Sk=Nk1x∈Dk∑(x−mk)T(x−mk)=Nk1x∈Dk∑[(xTu)u−(mkTu)u]T[(xTu)u−(mkTu)u]=Nk1∑[(xTu)2uTu−2(mkTu)(xTu)uTu+(mkTu)2uTu]=Nk1uTu∑[(xTu)2−2(mkTu)(xTu)+(mkTu)2]=Nka∑[(xTu)2−2(mkTu)(xTu)+(mkTu)2]=a[Nk∑(xTu)2−2Nk∑(mkTu)(xTu)+Nk∑(mkTu)2]=a[Nk∑(xTu)(xTu)−2Nk∑(mkTu)(xTu)+(mkTu)2]=a[Nk∑uTxxTu−2Nk∑xTumkTu+(mkTu)2]=a[uTNk∑xxTu−uTmkmkTu]=auT(Nk∑xxT−mkmkT)u
其中,Dk 表示第 k 类的样本集合,投影后的样本中心为 mk ,原样本的中心为 mk=Nk∑xxT ,由于 u 重在它的方向性,因此不妨设它的大小为 uTu=a 。
而对于整个算法来说,投影后所有类别的类内方差为
k=1∑KSk=ak=1∑KuT(Nk∑xxT−mkmkT)u=auTk=1∑K(Nk∑xxT−mkmkT)u
令 k=1∑K(Nk∑xxT−mkmkT)=Sw ,则有
k=1∑KSk=auTSwu
如何描述类间距离?
而对于投影后任意两个类别间的距离,有
Si,j=(mi−mj)T(mi−mj)=[(miTu)u−(mjTu)u]T[(miTu)u−(mjTu)u]=[(miTu)uT−(mjTu)uT][(miTu)u−(mjTu)u]=(mi−mj)TuuTu(mi−mj)Tu=a(mi−mj)Tu(mi−mj)Tu=auT(mi−mj)(mi−mj)Tu
投影后所有类别间的距离为
i,j且i=j∑Si,j=i,j且i=j∑auT(mi−mj)(mi−mj)Tu=auT[i,j且i=j∑(mi−mj)(mi−mj)T]u
令 i,ji=j∑(mi−mj)(mi−mj)T=Sb ,有
i,j且i=j∑Si,j=auTSbu
LDA优化目标
因此,根据LDA的优化准则,我们设计出
uminJ(u)=uTSbuuTSwu
为求最小化,假设 uTSbu=1 ,从而有以下优化问题
{minuTSwuuTSbu=1
通过拉格朗日乘子法有
L(u,λ)=uTSwu+λ(1−uTSbu)
从而有
∂u∂L=0→Swu=λSbu
即 Sb−1Swu=λu ,投影方向即为 Sb−1Sw 的特征向量。