特征選擇(亦即降維)是數據預處理中非常重要的一個步驟。對於分類來說,特征選擇可以從眾多的特征中選擇對分類最重要的那些特征,去除原數據中的噪音。主成分分析(PCA)與線性判別式分析(LDA)是兩種最常用的特征選擇算法。關於PCA的介紹,可以見我的另一篇博文。這里主要介紹線性判別式分析(LDA),主要基於Fisher Discriminant Analysis with Kernals[1]和Fisher Linear Discriminant Analysis[2]兩篇文獻。
LDA與PCA的一大不同點在於,LDA是有監督的算法,而PCA是無監督的,因為PCA算法沒有考慮數據的標簽(類別),只是把原數據映射到一些方差比較大的方向(基)上去而已。而LDA算法則考慮了數據的標簽。文獻[2]中舉了一個非常形象的例子,說明了在有些情況下,PCA算法的性能很差,如下圖:
我們用不同的顏色標注C1,C2兩個不同類別的數據。根據PCA算法,數據應該映射到方差最大的那個方向,亦即Y軸方向,但是如果映射到Y軸方向,C1,C2兩個不同類別的數據將完全混合在一起,很難區分開,所以使用PCA算法進行降維后再進行分類的效果會非常差。但是使用LDA算法,數據會映射到X軸方向。
LDA算法會考慮到數據的類別屬性,給定兩個類別C1、C2,我們希望找到一個向量ω,當數據映射到ω的方向上時,來自兩個類的數據盡可能的分開,同一個類內的數據盡可能的緊湊。數據的映射公式為:z=ωTx, 其中z是數據x到ω上的投影,因而也是一個d維到1維的維度歸約。
令m1和m1分別表示C1類數據投影之前個投影之后的均值,易知m1=ωTm1,同理m2=ωTm2
令s12和s22分別表示C1和C2類數據在投影之后的散布(scatter),亦即s12=∑(ωTxt-m1)2rt,s22=∑(ωTxt-m2)2(1-rt)其中如果xt∈C1,則rt=1,否則rt=0。
我們希望|m1-m2|盡可能的大,而s12+s22盡可能的小,Fisher線性判別式就是最大化下面式子的ω:
J(ω)=(m1-m2)2/(s12+s22) 式子-1
改寫式子-1中的分子: (m1-m2)2= (ωTm1-ωTm2)2=ωT(m1-m2)(m1-m2)Tω=ωTSBω
其中SB=(m1-m2)(m1-m2)T 式子-2
是類間散布矩陣(between class scatter matrix)。
改寫式子-1中的分母:
∑(ωTxt-m1)2rt=∑ωT(xt-m1)(xt-m1)Tωrt=ωTS1ω, 其中S1=∑rt(xt-m1)(xt-m1)T是C1的類內散布矩陣(within class scatter matrix)。
令SW=S1+S2,是類內散布的總和,則s12+s22=ωTSWω。
所以式子-1可以改寫為:
J(ω)=(ωTSBω)/(ωTSWω) 式子-3
我們只需要使式子-3對於ω求導,然后使導數等於0,便可以求出ω的值:ω=cSW-1(m1-m2),其中c是一個參數,我們只對ω的方向感興趣,所以c可以取值為1.
另外,最后求得的 J(ω)的值等於λk,λk是SW-1SB的最大的特征值,而ω則是SW-1SB的最大特征值所對應的特征向量。
最后有一些關於LDA算法的討論,出自文獻[1]:
1. Fisher LDA對數據的分布做了一些很強的假設,比如每個類的數據都是高斯分布,各個類的協方差相等。雖然這些強假設很可能在實際數據中並不滿足,但是Fisher LDA已經被證明是非常有效地降維算法,其中的原因是線性模型對於噪音的魯棒性比較好,不容易過擬合,缺點是模型簡單,表達能力不強,為了增強Fisher LDA算法的表達能力,可以引入核函數,參見我的另外一篇博客機器學習-核Fisher LDA算法。
2. 准確的估計數據的散布矩陣是非常重要的,很可能會有較大的偏置。用式子-2進行估計在樣本數據比較少(相對於維數來說)時會產生較大的變異性。
參考文獻:
[1] Fisher Discriminant Analysis with Kernals. Sebastian Mika, Gunnar Ratsch, Jason Weston, Bernhadr Scholkopf, Klaus-Robert Muller.
[2] Fisher Linear Discriminant Analysis. Max Welling.
[3] 機器學習導論。 Ethem Alpaydin