Fisher判別式(LDA)


Fisher判別式(LDA)

簡介

上面從貝葉斯公式出發,得到了線性判別分析的公式,這里從另外一個角度來看線性判別分析,也就是常說的Fisher判別式。其實Fisher判別式就是線性判別分析(LDA),只是在討論Fisher判別式的時候,更側重於LDA的數據降維的能力。

 

在應用統計學方法解決模式識別、機器學習中的問題的時候,有一個問題總是會出現:維數問題。很多在低維空間里可以解析或者計算的算法,在高維空間里面往往行不通,因此,數據降維就成了處理實際問題中的關鍵。

 

單純的從數學角度考慮,將dd維空間的數據壓縮稱為1維的數據是非常的容易的。然而,即便樣本集合在dd維空間里形成若干緊湊的相互分得開的集合,當把它們投影到某一個直線上的時候,就可能使得這些樣本混合在一起無法分別開來。但,在實踐中發現,總可以找到某個方向,使得在這個方向的直線上,樣本的投影能分開的最好。那么,現在的問題就是,如何根據實際情況找到這條最好的、最容易分類的投影線。這就是線性判別分析(Linear Discriminant Analysis)所要解決的基本問題,線性判別分析在很多時候,也叫做 Fisher’s linear discriminant(Fisher線性判別式)。准確的說,它是在Fisher線性判別式基礎上的一個推廣。

 

線性判別分析的基本思想,是將高維的模式樣本投影到最佳鑒別矢量空間,以達到抽取分類信息和壓縮特征空間維數的效果,投影后保證模式樣本在新的子空間有最大的類間距離和最小的類內距離,即模式在該空間中有最佳的可分離性,因此,它是一種有效的特征抽取方法。

 

在上面關於線性判別分析的說明中提到,投影后的樣本在新的空間需要有最大的類間距離和最小的類內距離。那么,什么是類間距離?什么又是類內距離?線性判別分析又是如何在最大化類間距離的同時最小化類內距離?回答完了這三個問題,就基本上能對線性判別分析有一個基本的了解了。

類間距離

對於線性分類器,有一種觀點就是將線性分類器看成是一個降維的操作。這里首先考慮二分類的問題,假設輸入向量x是D維的,並使用下面這個變換,將x投影到一個一維的數據y上:

 

 

此時在y上加一個閾值−w0,並以此來做二分類:

 

 

毫無疑問,上面的這種投影操作,會損失大量的樣本信息,同時在投影的直線上,可能會使得各個類別的數據相互重疊,無法分別開來。但無論怎樣,通過調整ww都可以找到一條最好的直線,使得投影之后類之間的距離能夠最大。

 

一類的數據都像是一個雲團,存在各自的分布,那么如何定義兩個類之間的距離呢?這里可以先考慮兩個類C1,C2各自的均值m1,m2:

 

 

用兩個均值m1,m2之間的距離m1−m2,作為類之間的距離,這是一種非常簡單直觀的類間距離的定義方法。

當兩個類分別通過w做投影之后,那么投影之后的類間距離為:

 

 

這里m˜1 是C1投影之后的類均值;m˜2是C2投影之后的類均值。而我們要做的,就是要找一個w能夠最大化m˜1−m˜2。但是,從上面的式子可以看出,通過增大w的模,可以無限的增大m˜1−m˜2,為了解決這個問題,需要將w的模設為1:||w||2=1。也即是說,w的模並不重要,重要的是w的方向。

 

對上面的式子,使用拉格朗日乘子法:

 

 

對w求導之后,得到:

 

 

這個結果也是顯然的,使用類的均值作為類間距離,要在投影的時候最大化類間距離,自然要讓投影線和(m1−m2)平行。

 

但是,單純最大化類間距離真的就可以讓投影后類之間的重疊最少嗎?看下面這幅圖。這幅圖是從PRML上截取下來的,這幅圖左邊就是單純的最大化類間距離,所以左圖中w和 (m1−m2)是平行的。右圖是Fisher線性判別式(Fisher linear discriminant)得到的w。

 

 

很顯然相對於右圖而言,單純的最大化類間距離無法讓投影后類的重疊最小,那么Fisher線性判別式到底又做了什么才能到到這個效果呢?這就是下面要講的:最小化類內距離。

類內距離

對於一個存在一定的分布的類而言,我們用來定義這個類的類內距離,最常用的,就是方差(variance),方差所表示的,就是數據的離散程度。一個類Ck在w上投影之后,其類內方差為:

 

 

這里 yn=wTxn ,是xn在w上的投影。

我們可以定義,投影后,總的類內方差為:投影后,各自類內方差的總和:s˜21+s˜22

Fisher線性判別式

上面已經介紹了類間距離,也就是類的均值的差;類內距離,也就是類內的方差。Fisher線性判別式的基本思想就是要最大化類間距離,同時最小化類內距離。這里就定義一個比值:

 

 

將這個比值最大化,就可以達到最大化類間距離的同時,最小化類內距離了。

 

對於原始的數據而言,其類內方差可以寫為:

 

 

投影后的類內方差為:

 

 

這里定義原始數據的類內總方差為:

 

 

那么投影后的類內總方差為:

 

 

投影后,類間距離也可以寫成相似的形式:

 

 

這里定義:

 

 

那么,投影后的類間距離可以寫成為:

 

 

這樣,就是可以把Fisher判別式的判別准則重寫為下面這個形式:

 

 

其中:

 

 

上面這個式子對w求導之后,可以得到:

 

 

這樣,我們就可以得到將投影后的類間距離最大化,同時投影后的類內距離最小化的之間ww。這樣,就從一個DD維問題轉化為了一個更容易分析和處理的一維問題。

 

當然,這個問題是一個多對一的問題,從理論上講,在很多訓練樣本的情況下,這個方法不僅不能讓最小誤差率降低,甚至會在一定程度上提高誤差率。然而,我們總還是願意為了得到在一維中操作的方便性,而想要的犧牲一些理論上的分類效果。

 

此時,最后剩下的問題就是如何在投影后,求解閾值,來進行分類了。閾值點,就是在一維空間中,可以將兩類分開的那個點的位置,這個問題相對來說非常的簡單,這里不予討論。

 

這里有一種特殊情況,就是當數據的條件概率分布函數p(x|Ck)是多遠正太函數,並且各個類別的協方差矩陣Σ相同的時候,最佳的判別邊界方程為:

 

 

其中:

 

 

從上面的推導可以看出,Fisher判別式就是線性判別分析(LDA),只是在討論Fisher判別式的時候,更側重於LDA的數據降維的能力。

使用

# 將數據的特征維度降為一維

# 當然這里可以將n_components設置為任何小於原始特征維度的數目

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

lda = LinearDiscriminantAnalysis(n_components=1)

X= lda.fit(X, y).transform(X)

Y= np.zeros(X_r2.shape)

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM