机器学习: Linear Discriminant Analysis 线性判别分析

Linear discriminant analysis (LDA) 线性判别分析也是机器学习中常用的一种降维算法,与 PCA 相比,
LDA 是属于supervised 的一种降维算法。PCA考虑的是整个数据集在高维空间的分散性,PCA降维之后依然要让数据在低维空间尽可能地分散。而LDA考虑的是类与类之间的差别(用距离来衡量)。

我们考虑两类情况下的LDA,
给定一个训练集 D={xiRd},i=1,2,...N, 假设其中有 n1 个属于第一类 c1n2 个属于第二类c2N=n1+n2, LDA 希望可以找到一个投影关系,使得原来的特征向量 xi 投影到低维空间之后,类间的距离尽可能地大,而类内距离尽可能地小。

我们可以计算每一类的均值向量:

u1=1n1xc1xu2=1n2xc2x

假设投影为 w,投影后为 y, 那么 y=wTx, 我们也可以求出投影后的均值:

v1=1n1yc1y=1n1xc1wTx=wTu1

v2=1n2yc2y=1n2xc2wTx=wTu2

那么,我们可以设立如下的目标函数:

J=|v1v2|=|wTu1wTu2|

上面的目标函数,保证了映射之后类间距离尽可能大,但是无法保证类内距离尽可能小,为了让类内距离尽可能小,我们可以进一步定义:

s21=yc1(yv1)2
s22=yc2(yv2)2

s21,s22 可以用来度量映射后每一类与类中心的分散程度。所以,最终的目标函数是:

J=|v1v2|2s21+s22

我们可以定义投影前的向量 x 与类中心的分散程度:

Si=xci(xui)(xui)T

SW=S1+S2

我们可以看到:

s2i=yci(yvi)2=xci(wTxwTui)2=wTSiw

s21+s22=wTSWw

同样的,我们有:

(v1v2)2=(wTu1wTu2)2=wT(u1u2)(u1u2)Tw=wTSBw

SB=(u1u2)(u1u2)T

所以最终的目标函数是:

J(w)=wTSBwwTSWw

最终得到的投影w:

w=argmax[wTSBwwTSWw]=S1W(u1u2)

对于多类的LDA, 我们不能简单地将原来的向量 x 投影到一个标量y,我们需要投影到一个低维的向量 y 上。一个有C类的训练集 D={xRd} 含有N 个样本, N=ni. 我们需要找到一个投影矩阵W, 使得 y=WTx

我们可以先定义

Sw=i=1cSiSi=xci(xui)(xui)T

SB=i=1cNi(uiu)(uiu)Tu=1Nx

那么目标函数可以写成:

J(W)=|WTSBW||WTSWW|

最后的投影矩阵可以表示为: W=[w1,w2,...wk], 其中 wi 满足如下关系:

SBwi=λiSWwiS1WSBwi=λiwi

wi 是矩阵 S1WSB 的特征向量, 所以简单来说,可以先对矩阵 S1WSB 做特征值分解,然后取前 k 个大的特征值所对应的特征向量,组成投影矩阵。但是由于 S_{B} 的秩不会超过 c1,所以 k 最大也就是 c1,取前面k 个特征向量组成投影矩阵。对于两类的情况, c=2, k=1, 所以两类的情况下,LDA投影得到的是一个标量。

原文地址:https://www.cnblogs.com/mtcnn/p/9412498.html