(有監督數據降維)線性判別分析 - LDA


sklearn官網 - sklearn.decomposition.LatentDirichletAllocation

一,LDA的基本思想及數學分析

參考:【機器學習】LDA線性判別分析
參考:機器學習降維算法二:LDA(Linear Discriminant Analysis)
LDA和PCA對比
LDA用於降維,和PCA有很多相同,也有很多不同的地方,因此值得好好的比較一下兩者的降維異同點。

首先我們看看相同點

  • 兩者均可以對數據進行降維。
  • 兩者在降維時均使用了矩陣特徵分解的思想。(求特徵值、特徵向量)
  • 兩者都假設數據符合高斯分佈

我們接着看看不同點

  • LDA是有監督的降維方法,而PCA是無監督的降維方法
  • LDA降維最多降到類別數k-1的維數,而PCA沒有這個限制。
  • LDA除了可以用於降維,還可以用於分類。
  • LDA選擇分類性能最好的投影方向,而PCA選擇樣本點投影具有最大方差的方向。

這點可以從下圖形象的看出,在不同數據分佈下LDA和PCA降維的優勢不同。二者各有優缺。
在這裏插入圖片描述
LDA算法的主要優點有:

  • 在降維過程中可以使用類別的先驗知識經驗,而像PCA這樣的無監督學習則無法使用類別先驗知識。
  • LDA在樣本分類信息依賴均值而不是方差的時候,比PCA之類的算法較優。

LDA算法的主要缺點有:

  • LDA不適合對非高斯分佈樣本進行降維,PCA也有這個問題。
  • LDA降維最多降到類別數k-1的維數,如果我們降維的維度大於k-1,則不能使用LDA。當然目前有一些LDA的進化版算法可以繞過這個問題。
  • LDA在樣本分類信息依賴方差而不是均值的時候,降維效果不好。
  • LDA可能過度擬合數據.

二,如何使用LDA進行數據降維

from sklearn.datasets import load_breast_cancer

BC = load_breast_cancer()
X = BC.data
y = BC.target

樣本數:569
維度:30

X.shape
>>>(569, 30)

將數據降至1維

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

LDA = LinearDiscriminantAnalysis(n_components=1)

1,先進行擬合fit(self, X[, y]),在進行轉化transform(self, X)

LDA.fit(X,y)
X_proj = LDA.transform(X)
X_proj.shape
>>>(569, 1)

2,擬合後直接對自身轉化fit_transform

x_pro = LDA.fit_transform(X,y)
x_pro.shape
>>>(569, 1)

三,示例

以紅酒數據爲例

from sklearn.datasets import load_wine
import matplotlib.pyplot as plt
import numpy as np
wine = load_wine()
X = wine.data
y = wine.target

原數據維度:3

np.unique(y)
>>>array([0, 1, 2])

通過LDA降至2維

LDA = LinearDiscriminantAnalysis(n_components=2)
LDA.fit(X,y)
X_lda = LDA.transform(X)
plt.figure()
colors = ['navy', 'turquoise', 'darkorange']
lw = 2

for color, i in zip(colors, [0, 1, 2]):
    plt.scatter(X_lda[y == i, 0], X_lda[y == i, 1], color=color,
                alpha=.8, lw=lw)
plt.show()

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章