一、簡述
線性判別分析(Linear discriminant Analysis希停,LDA)是一種監(jiān)督學習的降維技術仅乓,與PCA不同的是,PCA是尋找數據集中方差最大的方向作為主成分分量的軸巢寡,而LDA是最優(yōu)化分類的特征子空間喉脖。
LDA的思想可以用一句話概括,就是“投影后類內方差最小抑月,類間方差最大”树叽。也就是說,要將數據在低維度上進行投影谦絮,投影后希望每一種類別數據的投影點盡可能的接近题诵,而不同類別的數據的類別中心之間的距離盡可能的大:
與PCA之間的對比:
可以看出,如果是PCA的話层皱,為了方差最大化性锭,會選擇投影到左邊,而LDA則會選擇投影到下面奶甘。
二篷店、二類LDA
假設我們的數據集 ,其中任意樣本xi為n維向量臭家,yi∈{0,1}疲陕。我們定義
(j=0,1)為第j類樣本的個數,
(j=0,1)為第j類樣本的集合钉赁,而
(j=0,1)為第j類樣本的均值向量蹄殃,定義
(j=0,1)為第j類樣本的協(xié)方差矩陣(嚴格說是缺少分母部分的協(xié)方差矩陣)。
μj的表達式為:
Σj的表達式為:
由于是兩類數據你踩,因此我們只需要將數據投影到一條直線上即可诅岩。假設我們的投影直線是向量w讳苦,則對任意一個樣本本xi,它在直線w的投影為 吩谦,我們希望同一種類別數據的投影點盡可能的接近鸳谜,也就是要同類樣本投影點的協(xié)方差
和
盡可能的小,即最小化下面的式子:
另一方面式廷,我們希望讓不同類別的數據盡可能地遠離咐扭,考慮類的中心(也就是均值) ,只要使得
盡可能大即可滑废。
綜合上面的考量蝗肪,我們可以得出下面的優(yōu)化目標:
為了表示方便,我們做如下定義:
優(yōu)化目標重寫為:
利用凸優(yōu)化的知識蠕趁,我們使用和SVM中同樣的技巧薛闪,約束(和SVM中一樣,上下式子一同縮放不影響最后求
的結果)俺陋,這樣使用拉格朗日乘子法就可以得到:
如果可逆豁延,就又變回了求特征向量的套路:
當然,在實際問題中倔韭, 常出現不可逆的問題术浪,不過一般情況下可以通過其他方法解決:
令
,其中
是一個特別小的數寿酌,這樣
一定可逆
先使用PCA對數據進行降維胰苏,使得在降維后的數據上
可逆,再使用LDA
再往前一步:
我們考慮到兩類的這種情況下醇疼,其實 和
是平行的硕并,所以:
那么就算在式子兩邊左乘也是成立的,那么原先的式子就可以轉化為:
兩邊同除以 k 對式子沒有影響秧荆,所以倔毙,就可以得到得到特征向量:
也就是說我們只要求出原始二類樣本的均值和方差就可以確定最佳的投影方向w了
三、廣義瑞利商求解二類LDA
瑞利商 的定義:
其中乙濒,x為非零向量陕赃,而A為n×n的Hermitan矩陣(Hermitan矩陣就是滿足共軛轉置矩陣和自己相等的矩陣,即颁股,如果矩陣A是實矩陣么库,則滿足
的矩陣即為Hermitan矩陣)
瑞利商有一個非常重要的性質,即它的最大值等于矩陣A最大的特征值甘有,而最小值等于矩陣A的最小的特征值诉儒,也就是滿足(證明可以參考范數不等式):
廣義瑞利商的定義:
其中,x為非零向量亏掀,而A,B為n×n的Hermitan矩陣忱反,B為正定矩陣
廣義瑞利商是不是很眼熟泛释,我們完全可以套用廣義瑞利商來求解之前的最大值問題,但先要得到廣義瑞利商的最大最小值温算。
通過將廣義瑞利商通過標準化就可以轉化為瑞利商的形式怜校,從而得到廣義廣義瑞利商的最大最小值:
令 ,則:
分母:
分子:
最后我們就可以得到:
的最大值為矩陣
的最大特征值米者,或者說矩陣
的最大特征值韭畸,而最小值為矩陣
的最小特征值。
四蔓搞、多類LDA
假設我們的數據集,其中任意樣本
為n維向量,
∈{C1,C2,...,Ck}随橘。我們定義
(j=1,2...k)為第j類樣本的個數喂分,
(j=1,2...k)為第j類樣本的集合,而
(j=1,2...k)為第j類樣本的均值向量机蔗,定義
(j=1,2...k)為第j類樣本的協(xié)方差矩陣蒲祈。
假設我們投影到的低維空間的維度為d,對應的基向量為萝嘁,基向量組成的矩陣為W梆掸,它是一個n×d的矩陣,按我們在二類里的經驗牙言,此時我們的優(yōu)化目標應該可以寫成為:
不難寫出酸钦,畢竟二類里是兩個炒辉,那多類里就是多弄幾個而已:
應該怎么考慮呢度液,直接按之前的套路復雜度太高了,有沒有什么可以代替的好辦法呢尔店?
我們先考慮整體的散度矩陣蚕断,也就是:
其中欢伏,是整體的均值
那么 可以用
來表示(下面的推導來自熊貓學寫字的博客,符號有一些差異)
其中:
代入原式:
也就是:
現在我們的優(yōu)化目標完全求解出來了亿乳,但是還有一個問題就是現在 和
都是矩陣硝拧,不是標量,無法作為一個標量函數來優(yōu)化:
一種解決方法是使用行列式的值來替換矩陣葛假,解釋是說實際上是矩陣特征值的積障陶,一個特征值可以表示在該特征向量上的發(fā)散程度,因此我們可以使用行列式來計算桐款。
也就是說我們的優(yōu)化目標變?yōu)椋?/p>
這樣使用之前的拉格朗日乘子法就可以輕松解決咸这,結果也和上面是一樣的。
不過需要注意的是由于的秩最大為k?1魔眨,所以
的特征向量數目不會超過k?1媳维,所以我們投影后的d<=(k?1)酿雪。(因為
中每個
的秩為1,因此協(xié)方差矩陣相加后最大的秩為k(矩陣的秩小于等于各個相加矩陣的秩的和)侄刽,但是由于如果我們知道前k-1個
后指黎,最后一個
可以由前k-1個
線性表示,因此
的秩最大為k-1州丹,即特征向量最多有k-1個醋安。
另一種解決方法是取矩陣對角線之和,也就是特征值之和:
優(yōu)化過程可以轉化為:
那么根據廣義廣義瑞利商即可求得和上面一樣的結果墓毒。
五吓揪、LDA算法流程
輸入:數據集,其中任意樣本
為n維向
所计,降維到的維度d:
計算
柠辞、
和
計算
的最大的d個特征值和對應的d個特征向量
,得到投影矩陣W
對樣本集中的每一個樣本特征
,轉化為新的樣本
得到降維后的數據
六主胧、LDA和PCA
LDA的優(yōu)缺點:
LDA和PCA的比較:
七叭首、sklearn實現
class sklearn.discriminant_analysis.LinearDiscriminantAnalysis(solver='svd', shrinkage=None, priors=None, n_components=None, store_covariance=False, tol=0.0001)
Parameters:
solver: str類型,默認值為‘svd’
svd:使用奇異值分解求解踪栋,不用計算協(xié)方差矩陣焙格,適用于特征數量很大的情形,無法使用參數收縮(shrinkage)
lsqr:最小平方QR分解夷都,可以結合shrinkage使用
eigen:特征值分解眷唉,可以結合shrinkage使用shrinkage: str or float類型,默認值為None
是否使用參數收縮
None:不使用參數收縮
auto:str损肛,使用Ledoit-Wolf lemma
浮點數:自定義收縮比例components:int類型厢破,需要保留的特征個數,小于等于n-1
Attributes:
covariances_:每個類的協(xié)方差矩陣治拿, shape = [n_features, n_features]
means_:類均值摩泪,shape = [n_classes, n_features]
priors_:歸一化的先驗概率
rotations_:LDA分析得到的主軸,shape [n_features, n_component]
scalings_:數組列表劫谅,每個高斯分布的方差σ
import numpy as np
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
y = np.array([1, 1, 1, 2, 2, 2])
clf = LinearDiscriminantAnalysis()
clf.fit(X, y)
LinearDiscriminantAnalysis(n_components=None, priors=None, shrinkage=None,
solver='svd', store_covariance=False, tol=0.0001)
print(clf.predict([[-0.8, -1]]))
>> [1]