線性判別分析LDA(Linear Discriminant Analysis)

2021-03-02 SAS中文論壇

1. 問題

之前我們討論的PCA、ICA也好,對樣本數據來言,可以是沒有類別標籤y的。回想我們做回歸時,如果特徵太多,那麼會產生不相關特徵引入、過度擬合等問題。我們可以使用PCA來降維,但PCA沒有將類別標籤考慮進去,屬於無監督的。

比如回到上次提出的文檔中含有「learn」和「study」的問題,使用PCA後,也許可以將這兩個特徵合併為一個,降了維度。但假設我們的類別標籤y是判斷這篇文章的topic是不是有關學習方面的。那麼這兩個特徵對y幾乎沒什麼影響,完全可以去除。

再舉一個例子,假設我們對一張100*100像素的圖片做人臉識別,每個像素是一個特徵,那麼會有10000個特徵,而對應的類別標籤y僅僅是0/1值,1代表是人臉。這麼多特徵不僅訓練複雜,而且不必要特徵對結果會帶來不可預知的影響,但我們想得到降維後的一些最佳特徵(與y關係最密切的),怎麼辦呢?

2. 線性判別分析(二類情況)

回顧我們之前的logistic回歸方法,給定m個n維特徵的訓練樣例(i從1到m),每個x(i)對應一個類標籤。我們就是要學習出參數,使得(g是sigmoid函數)。

現在只考慮二值分類情況,也就是y=1或者y=0。

為了方便表示,我們先換符號重新定義問題,給定特徵為d維的N個樣例,,其中有個樣例屬於類別,另外個樣例屬於類別。

現在我們覺得原始特徵數太多,想將d維特徵降到只有一維,而又要保證類別能夠「清晰」地反映在低維數據上,也就是這一維就能決定每個樣例的類別。

我們將這個最佳的向量稱為w(d維),那麼樣例x(d維)到w上的投影可以用下式來計算

這裡得到的y值不是0/1值,而是x投影到直線上的點到原點的距離。

當x是二維的,我們就是要找一條直線(方向為w)來做投影,然後尋找最能使樣本點分離的直線。如下圖:

從直觀上來看,右圖比較好,可以很好地將不同類別的樣本點分離。

接下來我們從定量的角度來找到這個最佳的w。

首先我們尋找每類樣例的均值(中心點),這裡i只有兩個

由於x到w投影后的樣本點均值為

由此可知,投影后的的均值也就是樣本中心點的投影。

什麼是最佳的直線(w)呢?我們首先發現,能夠使投影后的兩類樣本中心點儘量分離的直線是好的直線,定量表示就是:

J(w)越大越好。

但是只考慮J(w)行不行呢?不行,看下圖

樣本點均勻分布在橢圓裡,投影到橫軸x1上時能夠獲得更大的中心點間距J(w),但是由於有重疊,x1不能分離樣本點。投影到縱軸x2上,雖然J(w)較小,但是能夠分離樣本點。因此我們還需要考慮樣本點之間的方差,方差越大,樣本點越難以分離。

我們使用另外一個度量值,稱作散列值(scatter),對投影后的類求散列值,如下

從公式中可以看出,只是少除以樣本數量的方差值,散列值的幾何意義是樣本點的密集程度,值越大,越分散,反之,越集中。

而我們想要的投影后的樣本點的樣子是:不同類別的樣本點越分開越好,同類的越聚集越好,也就是均值差越大越好,散列值越小越好。正好,我們可以使用J(w)和S來度量,最終的度量公式是

接下來的事就比較明顯了,我們只需尋找使J(w)最大的w即可。

先把散列值公式展開

我們定義上式中中間那部分

這個公式的樣子不就是少除以樣例數的協方差矩陣麼,稱為散列矩陣(scatter matrices)

我們繼續定義

稱為Within-class scatter matrix。

那麼回到上面的公式,使用替換中間部分,得

然後,我們展開分子

稱為Between-class scatter,是兩個向量的外積,雖然是個矩陣,但秩為1。

那麼J(w)最終可以表示為

在我們求導之前,需要對分母進行歸一化,因為不做歸一的話,w擴大任何倍,都成立,我們就無法確定w。因此我們打算令,那麼加入拉格朗日乘子後,求導

其中用到了矩陣微積分,求導時可以簡單地把當做看待。

如果可逆,那麼將求導後的結果兩邊都乘以,得

這個可喜的結果就是w就是矩陣的特徵向量了。

這個公式稱為Fisher linear discrimination。

等等,讓我們再觀察一下,發現前面的公式

那麼

代入最後的特徵值公式得

由於對w擴大縮小任何倍不影響結果,因此可以約去兩邊的未知常數和,得到

至此,我們只需要求出原始樣本的均值和方差就可以求出最佳的方向w,這就是Fisher於1936年提出的線性判別分析。

看上面二維樣本的投影結果圖:

3. 線性判別分析(多類情況)

前面是針對只有兩個類的情況,假設類別變成多個了,那麼要怎麼改變,才能保證投影后類別能夠分離呢?

我們之前討論的是如何將d維降到一維,現在類別多了,一維可能已經不能滿足要求。假設我們有C個類別,需要K維向量(或者叫做基向量)來做投影。

將這K維向量表示為。

我們將樣本點在這K維向量投影后結果表示為,有以下公式成立

為了像上節一樣度量J(w),我們打算仍然從類間散列度和類內散列度來考慮。

當樣本是二維時,我們從幾何意義上考慮:

其中和與上節的意義一樣,是類別1裡的樣本點相對於該類中心點的散列程度。變成類別1中心點相對於樣本中心點的協方差矩陣,即類1相對於的散列程度。

的計算公式不變,仍然類似於類內部樣本點的協方差矩陣

需要變,原來度量的是兩個均值點的散列情況,現在度量的是每類均值點相對於樣本中心的散列情況。類似於將看作樣本點,是均值的協方差矩陣,如果某類裡面的樣本點較多,那麼其權重稍大,權重用Ni/N表示,但由於J(w)對倍數不敏感,因此使用Ni。

其中

是所有樣本的均值。

上面討論的都是在投影前的公式變化,但真正的J(w)的分子分母都是在投影后計算的。下面我們看樣本點投影后的公式改變:

這兩個是第i類樣本點在某基向量上投影后的均值計算公式。

下面兩個是在某基向量上投影后的和

其實就是將換成了。

綜合各個投影向量(w)上的和,更新這兩個參數,得到

W是基向量矩陣,是投影后的各個類內部的散列矩陣之和,是投影后各個類中心相對於全樣本中心投影的散列矩陣之和。

回想我們上節的公式J(w),分子是兩類中心距,分母是每個類自己的散列度。現在投影方向是多維了(好幾條直線),分子需要做一些改變,我們不是求兩兩樣本中心距之和(這個對描述類別間的分散程度沒有用),而是求每類中心相對於全樣本中心的散列度之和。

然而,最後的J(w)的形式是

由於我們得到的分子分母都是散列矩陣,要將矩陣變成實數,需要取行列式。又因為行列式的值實際上是矩陣特徵值的積,一個特徵值可以表示在該特徵向量上的發散程度。因此我們使用行列式來計算(此處我感覺有點牽強,道理不是那麼有說服力)。

整個問題又回歸為求J(w)的最大值了,我們固定分母為1,然後求導,得出最後結果(我翻查了很多講義和文章,沒有找到求導的過程)

與上節得出的結論一樣

最後還歸結到了求矩陣的特徵值上來了。首先求出的特徵值,然後取前K個特徵向量組成W矩陣即可。

注意:由於中的 秩為1,因此的秩至多為C(矩陣的秩小於等於各個相加矩陣的秩的和)。由於知道了前C-1個後,最後一個可以有前面的來線性表示,因此的秩至多為C-1。那麼K最大為C-1,即特徵向量最多有C-1個。特徵值大的對應的特徵向量分割性能最好。

由於不一定是對稱陣,因此得到的K個特徵向量不一定正交,這也是與PCA不同的地方。

4. 實例

將3維空間上的球體樣本點投影到二維上,W1相比W2能夠獲得更好的分離效果。

PCA與LDA的降維對比:

PCA選擇樣本點投影具有最大方差的方向,LDA選擇分類性能最好的方向。

LDA既然叫做線性判別分析,應該具有一定的預測功能,比如新來一個樣例x,如何確定其類別?

拿二值分來來說,我們可以將其投影到直線上,得到y,然後看看y是否在超過某個閾值y0,超過是某一類,否則是另一類。而怎麼尋找這個y0呢?

根據中心極限定理,獨立同分布的隨機變量和符合高斯分布,然後利用極大似然估計求

然後用決策理論裡的公式來尋找最佳的y0,詳情請參閱PRML。

這是一種可行但比較繁瑣的選取方法,可以看第7節(一些問題)來得到簡單的答案。

5. 使用LDA的一些限制

1、 LDA至多可生成C-1維子空間

LDA降維後的維度區間在[1,C-1],與原始特徵數n無關,對於二值分類,最多投影到1維。

2、 LDA不適合對非高斯分布樣本進行降維。

上圖中紅色區域表示一類樣本,藍色區域表示另一類,由於是2類,所以最多投影到1維上。不管在直線上怎麼投影,都難使紅色點和藍色點內部凝聚,類間分離。

3、 LDA在樣本分類信息依賴方差而不是均值時,效果不好。

上圖中,樣本點依靠方差信息進行分類,而不是均值信息。LDA不能夠進行有效分類,因為LDA過度依靠均值信息。

4、 LDA可能過度擬合數據。

6. LDA的一些變種

1、 非參數LDA

非參數LDA使用本地信息和K臨近樣本點來計算,使得是全秩的,這樣我們可以抽取多餘C-1個特徵向量。而且投影后分離效果更好。

2、 正交LDA

先找到最佳的特徵向量,然後找與這個特徵向量正交且最大化fisher條件的向量。這種方法也能擺脫C-1的限制。

3、 一般化LDA

引入了貝葉斯風險等理論

4、 核函數LDA

將特徵,使用核函數來計算。

7. 一些問題

上面在多值分類中使用的

是帶權重的各類樣本中心到全樣本中心的散列矩陣。如果C=2(也就是二值分類時)套用這個公式,不能夠得出在二值分類中使用的。

因此二值分類和多值分類時求得的會不同,而意義是一致的。

對於二值分類問題,令人驚奇的是最小二乘法和Fisher線性判別分析是一致的。

下面我們證明這個結論,並且給出第4節提出的y0值得選取問題。

回顧之前的線性回歸,給定N個d維特徵的訓練樣例(i從1到N),每個對應一個類標籤。我們之前令y=0表示一類,y=1表示另一類,現在我們為了證明最小二乘法和LDA的關係,我們需要做一些改變

就是將0/1做了值替換。

我們列出最小二乘法公式

w和是擬合權重參數。

分別對和w求導得

從第一個式子展開可以得到

消元後,得

可以證明第二個式子展開後和下面的公式等價

其中和與二值分類中的公式一樣。

由於

因此,最後結果仍然是

這個過程從幾何意義上去理解也就是變形後的線性回歸(將類標籤重新定義),線性回歸後的直線方向就是二值分類中LDA求得的直線方向w。

好了,我們從改變後的y的定義可以看出y>0屬於類,y<0屬於類。因此我們可以選取y0=0,即如果,就是類,否則是類。

寫了好多,挺雜的,還有個topic模型也叫做LDA,不過名字叫做Latent Dirichlet Allocation



如果您覺得我們的內容對您還有點兒用,可以嘗試長按上圖二維碼打賞我們!^_^

相關焦點

  • 機器學習算法系列(十)-線性判別分析算法(一)(Linear Discriminant Analysis Algorithm)
    可以將問題轉化為當分母為1時,求分子前面加一個負號的最小值。(3)可以運用拉格朗日乘數法4,引入一個新的變量λ,可以將(2)式改寫成新的形式(4)對(3)式求偏導並令其等於零向量(5)觀察後發現S_b*w的方向恆為兩類樣本點的均值向量之差的方向,不妨令其為λ倍的兩類樣本點的均值向量之差(6)這樣就可以求出了w的方向
  • 運用sklearn進行線性判別分析(LDA)代碼實現
    基於sklearn的線性判別分析(LDA)代碼實現一、前言及回顧本文記錄使用sklearn庫實現有監督的數據降維技術——線性判別分析(LDA)。在上一篇LDA線性判別分析原理及python應用(葡萄酒案例分析),我們通過詳細的步驟理解LDA內部邏輯實現原理,能夠更好地掌握線性判別分析的內部機制。
  • 【R分享|實戰】LDA 線性判別分析
    」   --科白君之前我們分享了不少降維相關的分析方法,例如PCoA,NMDS,PCA分析,它們都是無監督學習。無監督學習指我們事先沒有任何訓練樣本,直接對數據進行建模。無監督學習的主要算法是聚類,聚類目的在於把相似的東西聚在一起,主要通過計算樣本間和群體間距離得到。
  • 線性判別分析(LDA)及其在R中實現
    線性判別分析(Linear Discriminant Analysis,LDA)是一種用於數據降維以及分類預測的機器學習方法,由RA Fisher(1936)提出,也稱為Fisher判別式。最初的LDA只能處理兩種分類問題,Rao(1948)拓展了「多類別線性判別分析」或稱「多元判別分析」,將LDA推廣至適用於多分類的情形。
  • LDA線性判別分析
    問題線性判別分析(二分類情況)PCA和LDALDA降維實例小結  參考資料問題之前我們討論的 PCA降維,對樣本數據來言,可以是沒有類別標籤 y 的。如果我們做回歸時,如果特徵太多,那麼會產生不相關特徵引入、過度擬合等問題。我們可以使用PCA 來降維,但 PCA 沒有將類別標籤考慮進去,屬於無監督的。
  • 詳解線性判別分析(Linear Discriminant Analysis)
    對應一個類標籤的公式          至此,我們只需要求出原始樣本的均值和方差就可以求出最佳的方向w,這就是Fisher於1936年提出的線性判別分析。線性判別分析(多類情況)     前面是針對只有兩個類的情況,假設類別變成多個了,那麼要怎麼改變,才能保證投影后類別能夠分離呢?
  • 線性判別分析LDA
    線性判別分析是一種線性降維的方法,和之前ARGO提及的PCA(見文章主成分分析(PCA)入門)目的一樣,都是為了降低海量特徵以實現降維,但兩者又有顯著的不同。全文分成如下四個部分:PCA 回顧線性判別分析(LDA)多類別的線性判別分析使用LDA的限制一  PCA回顧介紹LDA之前,簡單的回顧一下之前講到的PCA。
  • 特徵錦囊:怎麼簡單使用LDA來劃分數據且可視化呢?
    LDA算法在數據挖掘中是很基礎的算法,簡單回顧一下定義:LDA的全稱為Linear Discriminant Analysis, 中文為線性判別分析,LDA是一種有監督學習的算法,和PCA不同。PCA是無監督算法,。
  • 數據江湖之多元劍法 | 招式三:判別分析
    這兩個步驟中的第一步,在多元分析裡面,就稱之為「判別分析」(discriminant analysis),而第二步,就是「分類」(classification)。判別分析是描述性的,而分類分析是推斷性的。當然,這二者並不是可以嚴格割離的,因為判別分析的主要目的就是進一步進行分類,而分類分析通常都要有判別分析的結果做基礎。我們這一次就先討論第一步,判別分析。
  • sklearn與機器學習系列專題之降維(二)一文弄懂LDA特徵篩選&降維
    這時候,就要線性判別分析降維(Linear discriminant Analysis,LDA)隆重登場啦!線性判別分析(也有叫做Fisher Linear Discriminant),是一種有監督的線性降維算法,與PCA算法尋找數據集中方差最大的方向作為主成分分量的軸不同,LDA是為了使得降維後的數據點儘可能地容易被區分。
  • 【數據分析】R語言實現常用的5種數據分析(主成分+因子+多維標度+判別+聚類)
    1 選擇主成分個數選擇主成分個數通常有如下幾種評判標準:根據經驗與理論進行選擇根據累積方差貢獻率 ,例如選擇使累積方差貢獻率達到80%的主成分個數。根據相關係數矩陣的特徵值,選擇特徵值大於1的主成分。另一種較為先進的方法是平行分析(parallel analysis)。
  • R語言實現常用的5種分析方法(主成分+因子+多維標度+判別+聚類
    主成分分析(principal components analysis, PCA)是一種分析、簡化數據集的技術。 另一種較為先進的方法是平行分析(parallel analysis)。該方法首先生成若干組與原始數據結構相同的隨機矩陣,求出其特徵值並進行平均,然後和真實數據的特徵值進行比對,根據交叉點的位置來選擇主成分個數。
  • R語言實現常用的5種分析方法(主成分+因子+多維標度+判別+聚類)
    另一種較為先進的方法是平行分析(parallel analysis)。該方法首先生成若干組與原始數據結構相同的隨機矩陣,求出其特徵值並進行平均,然後和真實數據的特徵值進行比對,根據交叉點的位置來選擇主成分個數。
  • 【乾貨】微生物高分文章必備分析LEfSe
    今天Fanny給大家介紹一個好玩又簡單的微生物多樣性分析中的組間比較分析——LEfSe,即linear discriminant analysis
  • 數據分析36計(28):Python 使用 Flask+Docker, 100行代碼內實現機器學習實時預測​
    我們將使用 Docker 和 Flask-RESTful 實現線性判別分析和多層感知器神經網絡模型的實時預測。項目包括的文件有:Dockerfile,train.py,api.py,requirements.txt, train.csv,test.json。
  • 【手把手教你】使用Logistic回歸、LDA和QDA模型預測指數漲跌
    當然,本文的目的不是尋找最優的算法,而是機器學習在分析預測的應用。基於此,本文以Logistic 回歸(LR)、線性判別法(LDA)、 二次判別分析(QDA)模型為例,對上證綜指的漲跌進行預測。後續推文將會應用其他可能更有效的算法,包括SVM、集成學習和深度學習等。
  • 線性判別分析(LDA)原理總結
    小白學視覺」,選擇加"星標"或「置頂」重磅乾貨,第一時間送達線性判別分析(Linear Discriminant Analysis,以下簡稱LDA)是有監督的降維方法,在模式識別和機器學習領域中常用來降維。
  • 線性分類模型(一):線性判別模型分析
    ,線性分類模型分為判別式模型和生成式模型,本文首先簡單複習了與算法相關的數學基礎知識,然後分析各線性判別式分類算法,如最小平方法,Fisher線性判別法和感知器法,最後總結全文。目錄1、相關的數學知識回顧2、判別式模型和生成性模型3、最小平方法4、Fisher線性判別函數5、感知器算法6、總結1、直線方程和平面方程拓展到分類思想: