用線性判別分析 LDA 降維

本文結(jié)構(gòu):

  • 什么是 LDA
  • 和 PCA 區(qū)別
  • LDA 投影的計(jì)算過程
  • LDA 降維的例子

1. 什么是 LDA

先說判別分析,Discriminant Analysis 就是根據(jù)研究對象的各種特征值,判別其類型歸屬問題的一種多變量統(tǒng)計(jì)分析方法。

根據(jù)判別標(biāo)準(zhǔn)不同,可以分為距離判別、Fisher 判別、Bayes 判別法等。例如,在 KNN 中用的是距離判別,樸素貝葉斯分類用的是 Bayes 判別,線性判別分析用的是 Fisher 判別式。

根據(jù)判別函數(shù)的形式,可以分為線性判別和非線性判別。

線性判別式分析(Linear Discriminant Analysis),簡稱為 LDA,也稱為 Fisher 線性判別,1936 年由 Ronald Fisher 提出,1996 年由 Belhumeur 引入模式識別和人工智能領(lǐng)域。


2. 和 PCA 區(qū)別

二者都有降維的作用。

1. 左邊是 PCA,屬于無監(jiān)督方法,當(dāng)數(shù)據(jù)沒有標(biāo)簽時可以用它。

右邊是 LDA,屬于監(jiān)督方法??紤]了數(shù)據(jù)的分類信息,這樣數(shù)據(jù)在低維空間上就可以分類了,減少了很多的運(yùn)算量。

2. PCA 主要是從特征的協(xié)方差角度考慮,追求的是在降維之后能夠最大化保持?jǐn)?shù)據(jù)的內(nèi)在信息。
它不考慮分類信息,因此,降低維度后,信息損失降到最低,但分類上可能會變得更加困難。

LDA 追求的是降維后的數(shù)據(jù)點(diǎn)盡可能容易被區(qū)分。
降維后的樣本數(shù)據(jù)在新的維度空間有最大的類間距離和最小的類內(nèi)方差,數(shù)據(jù)在低維空間有最佳的可分離性。

3. PCA 后的維度數(shù)目是和數(shù)據(jù)維度相關(guān)的,原始數(shù)據(jù)是 n 維,那么 PCA 后維度為 1、2~n 維。

LDA 后的維度數(shù)目是和類別的個數(shù)相關(guān)的,原始數(shù)據(jù)是 n 維,一共有 C 個類別,那么 LDA 后維度為 1、2~C-1 維。

4. PCA 投影的坐標(biāo)系都是正交的。

LDA 關(guān)注分類能力,不保證投影到的坐標(biāo)系是正交的。


3. LDA 投影的計(jì)算過程(兩個類別)

給的數(shù)據(jù)有兩個類別,要找到一個向量 w,將數(shù)據(jù) x 投影到 w 上之后:

  • 兩個類別的距離較遠(yuǎn),這一點(diǎn)用映射后兩個類別的均值差的絕對值來度量。
  • 每個類內(nèi)部數(shù)據(jù)點(diǎn)比較聚集,這一點(diǎn)用投影后每個類別的方差來度量。

類別 i 的均值:


類別 i 投影后的均值:


投影后均值差的絕對值:

投影后的方差,y 為投影后的數(shù)據(jù),y = w_t * x:

目標(biāo)優(yōu)化函數(shù)為:

為了方便計(jì)算 w ,繼續(xù)推導(dǎo)分母為:


分子為:


則優(yōu)化目標(biāo) J(w) 為:

我們希望分母越小越好,分子越大越好:

  • 分母小,則每個類內(nèi)部數(shù)據(jù)點(diǎn)比較聚集;
  • 分子大,則兩個類別的距離較遠(yuǎn)。

所以需要找出一個 W 使 J(W) 的值最大。

最后推導(dǎo)出 w :

這樣通過計(jì)算后,獲得向量 W,生成新的 Y 軸,使兩個類別的樣本數(shù)據(jù)在新 Y 軸的投影能最大程度的分離。


4. LDA 降維的例子

下面這個例子,將 iris 數(shù)據(jù)降到 2 維:

import matplotlib.pyplot as plt

from sklearn import datasets
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

iris = datasets.load_iris()

X = iris.data
y = iris.target
target_names = iris.target_names

lda = LinearDiscriminantAnalysis(n_components=2)
X_r2 = lda.fit(X, y).transform(X)

plt.figure()
for c, i, target_name in zip("rgb", [0, 1, 2], target_names):
    plt.scatter(X_r2[y == i, 0], X_r2[y == i, 1], c=c, label=target_name)
plt.legend()
plt.title('LDA of IRIS dataset')

plt.show()

資料:
http://blog.csdn.net/porly/article/details/8020696
http://www.voidcn.com/blog/u013488563/article/p-1024688.html
http://blog.csdn.net/sunmenggmail/article/details/8071502
http://dataunion.org/13451.html
http://sklearn.lzjqsdd.com/auto_examples/decomposition/plot_pca_vs_lda.html#example-decomposition-plot-pca-vs-lda-py


推薦閱讀 歷史技術(shù)博文鏈接匯總
http://www.itdecent.cn/p/28f02bb59fe5
也許可以找到你想要的:
[入門問題][TensorFlow][深度學(xué)習(xí)][強(qiáng)化學(xué)習(xí)][神經(jīng)網(wǎng)絡(luò)][機(jī)器學(xué)習(xí)][自然語言處理][聊天機(jī)器人]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容