

在 LDA 中,我们的基本想法是选定一个方向,将试验样本顺着这个方向投影,投影后的数据需要满足两个条件,从而可以更好地分类:
- 相同类内部的试验样本距离接近。
- 不同类别之间的距离较大。
首先是投影,我们假定原来的数据是向量 x,那么顺着 w 方向的投影就是标量:
z=wT⋅x(=∣w∣⋅∣x∣cosθ)
对第一点,相同类内部的样本更为接近,我们假设属于两类的试验样本数量分别是 N1和 N2,那么我们采用方差矩阵来表征每一个类内的总体分布,这里我们使用了协方差的定义,用 S 表示原数据的协方差:
C1:Varz[C1]C2:Varz[C2]=N11i=1∑N1(zi−zc1)(zi−zc1)T=N11i=1∑N1(wTxi−N11j=1∑N1wTxj)(wTxi−N11j=1∑N1wTxj)T=wTN11i=1∑N1(xi−xc1)(xi−xc1)Tw=wTS1w=N21i=1∑N2(zi−zc2)(zi−zc2)T=wTS2w
所以类内距离可以记为:
Varz[C1]+Varz[C2]=wT(S1+S2)w
对于第二点,我们可以用两类的均值表示这个距离:
(zc1−zc2)2=(N11i=1∑N1wTxi−N21i=1∑N2wTxi)2=(wT(xc1−xc2))2=wT(xc1−xc2)(xc1−xc2)Tw
综合这两点,由于协方差是一个矩阵,于是我们用将这两个值相除来得到我们的损失函数,并最大化这个值:
w^=wargmaxJ(w)=wargmaxVarz[C1]+Varz[C2](zc1−zc2)2=wargmaxwT(S1+S2)wwT(xc1−xc2)(xc1−xc2)Tw=wargmaxwTSwwwTSbw
这样,我们就把损失函数和原数据集以及参数结合起来了。下面对这个损失函数求偏导,注意我们其实对 w 的绝对值没有任何要求,只对方向有要求,因此只要一个方程就可以求解了:
∂w∂J(w)=2Sbw(wTSww)−1−2wTSbw(wTSww)−2Sww=0⟹Sbw(wTSww)=(wTSbw)Sww⟹w∝Sw−1Sbw=Sw−1(xc1−xc2)(xc1−xc2)Tw∝Sw−1(xc1−xc2)
于是 Sw−1(xc1−xc2) 就是我们需要寻找的方向。最后可以归一化求得单位的 w 值。