註:本文非筆者原創,原文轉載自:http://blog.csdn.net/porly/article/details/8020883
首先搞清楚什麼叫判別分析?Discriminant Analysis就是根據研究對象的各種特徵值判別其類型歸屬問題的一種多變數統計分析方法。
根據判別標準不同,可以分為距離判別、Fisher判別、Bayes判別法等。比如在KNN中用的就是距離判別,當然這裡的“距離”又有好幾種:歐氏距離、街區距離、甚至可以用皮爾森相關係數等。樸素貝葉斯分類用的就是Bayes判別法。本文要講的線性判別分析就是用是Fisher判別式。
根據判別函數的形式,可以分為線性判別和非線性判別。
LDA和PCA比較
兩者都是為了在對未經處理資料降維之後進行分類。PCA是無監督的方式,它沒有分類標籤,降維之後需要採用K-Means或自組織映射網路等無監督的演算法進行分類。LDA是有監督的方式,它先對訓練資料進行降維,然後找出一個線性判別函數。
兩類線性判別分析
給定N個特徵為d維的範例,其中有N1個範例屬於類別w1,另外N2個範例屬於類別w2。現在我們要將未經處理資料降低到只有一維,降維函數(或者叫投影函數)是:,最後我們就依靠每個範例對應的y值來判別它屬於哪一類。
形象的圖求如下
我們就是要找到這個最佳的w,使得範例映射到y後最易於區分。
定義每類範例的均值點:
範例投影到y後有均值點為:
我們希望投影后兩類範例中心盡量地分離,即越大越好。
同時我們希望投影之後類內部的方差越小越好。
由於得到我們的目標函數:
又是個最佳化問題。最終解得,s1和s2分別中原始範例的方差。
這就是Fisher在1936年提出的線性判別分析。
如果(u是所有樣本的均值),就屬於類別C1,否則就屬於類別C2。
實際上使用線性迴歸得到的直線方向就是二值分類中LDA求得的直線方向。
多類線性判別分析
假設有C個類別,降以一維已經不能滿足分類要求了,我們需要k個基向量來做投影,W=[w1|w2|...|wk] 。樣本點在這k維投影后的結果為[y1,y2,...,yk],且有
。
同樣是求一個類似於(1)式的最佳化問題,我們得到
即wi是矩陣的特徵向量。
首先求出的特徵值,然後取其前k個特徵向量組成W即可,因為特徵值大的對應的特徵向量分割性好。另外SB的秩至多為C-1,所以不為0的特徵值至多有C-1個,所以k最大為C-1。
由於不一定是對稱矩陣,因此k個特徵向量不一定正交,這也是與PCA不同的地方。求的特徵向量不能採用奇異值分解的方式,而因該採用更通用的求一般方陣特徵向量的方式。特徵值的求法有很多,求一個D
* D的矩陣的時間複雜度是O(D^3), 也有一些求Top k的方法,比如說冪法,它的時間複雜度是O(D^2 * k)。
那降維之後又如何根據y值來判別分類呢?取[y1,y2,...,yk]中最大的那個就是所屬的分類。這麼說對於有C個類別的分類問題,我們最多隻能分出C-1個類別來?
使用LDA的限制
- LDA至多可產生C-1維子空間
- LDA不適合對非高斯分布的樣本進行降維
- LDA在樣本分類資訊依賴方差而不是均值時,效果不好。
- LDA可能過度學習資料。