1. LDA描述
線性判別分析(Linear Discriminant Analysis,LDA)是一種有監督學習算法,同時經常被用來對數據進行降維,它是Ronald Disher在1936年發明的,有些資料上也稱位Fisher LDA.LDA是目前機器學習、數據挖掘領域中經典且熱門的一種算法
相比於PCA,LDA可以作為一種有監督的降維算法,在PCA中,算法沒有考慮數據的類別,自己把原數據映射到方差較大的方向上而已
如下圖,紅色的點代表class1類別的數據,藍色代表class2的數據,根據PCA算法,數據應該映射到方差最大的方向,即Y軸,但是class1和class2兩個不同類別的數據就會完全的混合在一起,很難區分開。所以使用PCA算法進行降維后再進行分類的效果會非常差,這時候就需要我們使用LDA算法,將數據映射到X軸上。下面我們從二分類分析LDA原理
import numpy as np
import matplotlib.pyplot as plt
c1_x = np.random.uniform(-0.5,-2,100)
c1_y = np.random.uniform(-10,10,100)
c2_x = np.random.uniform(0.5,2,100)
c2_y = np.random.uniform(-10,10,100)
l1_x = [0 for _ in range(24)]
l1_y = [i for i in range(-12,12,1)]
l2_x = [i for i in range(-4,5,1)]
l2_y = [0 for _ in range(9)]
plt.scatter(c1_x,c1_y,c = 'r',marker = 'o',label='class1')
plt.scatter(c2_x,c2_y,c = 'b',marker = '*',label='class2')
plt.plot(l1_x,l1_y,'black',label='X')
plt.plot(l2_x,l2_y,'g',label='Y')
plt.legend()
plt.xlim(-5, 5)
plt.ylim(-12, 12)
plt.show()
2. 從二分類分析LDA原理
先拋出LDA原理中心思想:最大化類間距離和最小化類內距離,再進行說明
從一個簡單的二分類問題出發,有C1、C2兩個類別的樣本,兩類的均值分別\(\mu_1,\mu_2\),我們希望投影之后兩類之間的距離盡可能大$$D(C1,C2) ={ ||W^T\mu_1 - W^T\mu_2||}_2^2$$
注:\(W^T\mu_1為\mu_1再W方向上的投影向量\),從而轉化為以下優化問題
容易發現,當W與\((\mu_1 - \mu_2)\)方向一致的時候,該距離最大
上面左邊的圖是按照最大化兩類投影中心距離的准則繪制的,會發現原本可以被線性划分的兩類樣本,經過投影后又了一定程度的重疊
上面右邊的圖就是按照最大類間距,最小類內距思想繪制的,雖然兩類的中心在投影之后的距離又所減小,但確使投影之后樣本的可區分性提高了
如何表示類內距離?可以使用類內方差,類內方差定義為各個類分別的方差和,有類內距離表示再結合上圖說明,繼續對上面的優化函數進行優化得到:
注:D1為C1的類內方差和,D2為C2的類內方差和
3. LDA求解方法
因此J(W)可以寫成:
定義類間距離\(S_B = (\mu_1 - \mu_2){(\mu_1 - \mu_2)}^T\),類內距離\(S_W = \sum_{x\epsilon C_i}(x - \mu_i){(x - \mu_i)}^T\)
則:$$J(W) = \frac{W^TS_BW}{W^TS_WW}$$
對W求導,並令導數為0
令\(\lambda = J(W) = \frac{W^TS_BW}{W^TS_WW}\)則有:
整理得到:
看到這里就以及很清楚了,我們最大化目標對應一個矩陣的特征值,於是LDA降維變成了一個求矩陣特征向量的問題。\(J(W)\)就對應矩陣\({S_w}^{-1}S_B\)的最大的特征值,而投影方向就是這個特征值對應的特征向量
將二分類推廣到多分類也得到同樣的結論,總結具有多個列別標簽高維的LDA求解方法:
- (1)計算數據集中每個類別樣本的均值向量\(\mu_j\),以及總體均值向量\(\mu\)
- (2)計算類內散度矩陣\(S_W\),全局散度矩陣\(S_T\),並得到類間散度矩陣\(S_B = S_T - S_W\)
- (3)對矩陣\({S_W}^{-1}S_B進行特征值分解,將特征值從大到小排列\)
- (4)特征值前d大的對應的特征向量\(W_1,W_2,...,W_d\),通過以下映射將n維映射到d維:$$\acute{X_i} ={(W_1^Tx_i,W_2^Tx_i,...,W_d^Tx_i)}^T$$
參考:《百面機器學習》