线性判别分析LDA算法与python实现
??降維指的是通過某種數學變換將高維原始空間的屬性轉變為低維子空間,根據變換形式可將該數學變換分為線性變換和非線性變換,對應的降維算法也被稱為線性降維和非線性降維.其中,線性降維算法主要有線性判別分析(linear discriminant analysis,LDA)和主成分分析(Principal Component Analysis,PCA),非線性降維主要有核化思想(如Kernelized PCA)和流形學習(Isomap,LLE,LE等)兩類.
??假定有原始空間高維數據X∈Rn×mX \in R^{n \times m}X∈Rn×m,其中nnn為樣本數,mmm為樣本長度,現我們要求XXX的低維嵌入Y∈Rn×dY \in R^{n \times d}Y∈Rn×d,其中d<<md<<md<<m.線性降維的思想就是求一個權重矩陣W∈Rm×dW \in R^{m \times d}W∈Rm×d,使用WWW對XXX進行線性變換Y=XWY=XWY=XW,使得變換前后的數據分布一致.如上所述,LDA和PCA都是線性降維算法,不同的是LDA是監督學習算法,而PCA是面向無標簽的數據樣本.本文介紹LDA算法.
??首先盜用西瓜書里的一張圖,這張圖很清晰地闡釋了LDA的核心思想:圖中的數據簡化為二維降維到一維,降維過程中,LDA算法使得低維空間中,同一類的數據盡可能接近,使得不同類數據盡可能遠離.如上文所述,LDA是一種監督學習算法,即數據具有label,這里與西瓜書保持一致,使用了二分類問題的數據,分別記為X0∈Rn0×mX_0 \in R^{n_0 \times m}X0?∈Rn0?×m與X1∈Rn1×mX_1 \in R^{n_1 \times m}X1?∈Rn1?×m.我們的目標是找到一個變換矩陣W∈Rm×dW \in R^{m \times d}W∈Rm×d對原始數據XXX進行線性變換Y=XWY=XWY=XW,且變換后的YYY滿足上述性質.記μ0∈Rm×1,μ1∈Rm×1,Σ0∈Rm×m,Σ1∈Rm×m\mu_0 \in R^{m \times 1},\mu_1 \in R^{m \times 1},\Sigma_0 \in R^{m \times m},\Sigma_1 \in R^{m \times m}μ0?∈Rm×1,μ1?∈Rm×1,Σ0?∈Rm×m,Σ1?∈Rm×m分別為X0X_0X0?的均值,X1X_1X1?的均值,X0X_0X0?的協方差,X1X_1X1?的協方差,則: μi=1ni∑x∈Xix\mu_i=\frac{1}{n_i} \sum_{x \in X_i} xμi?=ni?1?x∈Xi?∑?x Σi=∑x∈Xi(x?μi)(x?μi)T\Sigma_i=\sum_{x \in X_i}(x-\mu_i)(x-\mu_i)^TΣi?=x∈Xi?∑?(x?μi?)(x?μi?)T 首先我們希望變換后的類間距離越大越好,我們定義類間距離為類中心的l2l_2l2?距離,所以該步驟我們的目標是: maxW∣∣WTμ0?WTμ1∣∣22{\rm max}_W \ ||W^T\mu_0-W^T\mu_1||_2^2maxW??∣∣WTμ0??WTμ1?∣∣22? 即:maxWWT(μ0?μ1)(μ0?μ1)TW{\rm max}_W \ W^T(\mu_0-\mu_1)(\mu_0-\mu_1)^T WmaxW??WT(μ0??μ1?)(μ0??μ1?)TW 其次我們希望變換后的類內協方差越小越好,即: minWWT(Σ0+Σ1)W{\rm min}_W W_T (\Sigma_0+\Sigma_1) WminW?WT?(Σ0?+Σ1?)W ??現定義兩個矩陣,類內散度矩陣(intra-class scatter matrix) Sa∈Rm×mS_a \in R^{m \times m}Sa?∈Rm×m與類間散度矩陣(inter-class scatter matrix) Sr∈Rm×mS_r \in R^{m \times m}Sr?∈Rm×m:Sa=Σ0+Σ1S_a=\Sigma_0+\Sigma_1Sa?=Σ0?+Σ1? Sr=(μ0?μ1)(μ0?μ1)TS_r=(\mu_0-\mu_1)(\mu_0-\mu_1)^TSr?=(μ0??μ1?)(μ0??μ1?)T 我們約束WTSaW=1W^T S_a W=1WTSa?W=1,所以最后的優化問題可以寫成: minW?WTSrW{\rm min}_W \ -W^T S_r WminW???WTSr?W st.WTSaW=1st. \ \ W^T S_a W=1st.??WTSa?W=1 定義拉格朗日函數為: L(W)=?WTSrW+λ(WTSaW?1)L(W)=-W^T S_r W + \lambda (W^T S_a W-1)L(W)=?WTSr?W+λ(WTSa?W?1) 對上述方程求WWW的偏導,得到: SrW=λSaWS_rW=\lambda S_aWSr?W=λSa?W 由上式可知,W∈Rm×dW \in R^{m \times d}W∈Rm×d的閉解為矩陣Sa?1SrS_a^{-1}S_rSa?1?Sr?最大的ddd個特征值對應的mmm維特征向量.這里公布一下代碼和實驗結果,代碼略簡略,只考慮了三維降到二維.
??在LDA中,我們約束WTSaW=1W^T S_a W=1WTSa?W=1,可能是提出算法的學者覺得類內相似對比類間差異不那么重要吧,現在我們探索一下另一種情況,我們約束WTSrW=1W^T S_r W=1WTSr?W=1,那么優化問題變成了:minWWTSaW{\rm min}_W \ W^T S_a WminW??WTSa?W st.WTSrW=1st. \ \ W^T S_r W=1st.??WTSr?W=1 定義拉格朗日函數為: L(W)=WTSaW+λ(WTSrW?1)L(W)=W^T S_a W + \lambda (W^T S_r W-1)L(W)=WTSa?W+λ(WTSr?W?1) 對上述方程求WWW的偏導,得到: ?SaW=λSrW-S_aW=\lambda S_rW?Sa?W=λSr?W 由上式可知,W∈Rm×dW \in R^{m \times d}W∈Rm×d的閉解為矩陣?Sr?1Sa-S_r^{-1}S_a?Sr?1?Sa?最大的ddd個特征值對應的mmm維特征向量.代碼中只需將21行注釋,并恢復22行即可,下圖展示了用這種約束得到的實驗結果,可以看出兩種約束并沒有什么很大的差異,當然可能在高階上第一種方法表現更優異,這里就不往下探索了.
總結
以上是生活随笔為你收集整理的线性判别分析LDA算法与python实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【android】关于android10
- 下一篇: http上传文件原理