線性判別函數

最近看到線性判別分析LDA,然後發現網上有少量的文章說線性判別函數和LDA很相似,當時就感覺雖然名字很像,但這完全是兩個不相關的模型。所以就把這些東西詳細地區別了一下。

一、線性判別函數

1、函數是對模式進行分類的準則函數,因此非常明顯線性判別函數是用來進行模式識別的。若分屬於ω1,ω2的兩類模式可用一方程d(X) =0來劃分,那麼稱d(X) 爲判別函數,或稱判決函數、決策函數。


例:一個二維的兩類判別問題,模式分佈如圖示,這些分屬於ω1,ω2兩類的模式可用一直線方程d(X)=0來劃分。d( X) = w1 x1 + w2 x2 +w3 = 0,式中x1 , x2 爲座標變量,w1 , w2, w3 爲方程參數。

將某一未知模式 X代入:d( X) ,若d( X)>0,則屬於ω1類,若d( X)<0,則屬於ω2類。若d( X)=0,則可以考慮拒絕或者做出其他判斷。判別函數d(X)可以是線性的或者非線性的函數,我們只討論線性的,對於非線性的問題在廣義線性判別函數的時候會將所有非線性的問題轉換爲線性問題。

在上面的例子中,我們討論的是在一個二維的平面內進行分類,其實在大多時候數據的維度都遠遠的要超過二維。特別是在線性函數無法分割數據的時候往往需要把數據擴展到更高維度,才能用線性函數進行分割。

d( X) = w1 x1 + w2 x2 + …+wn xn+w0,X=[x1,x2,…,xn,1],參數向量W=[w1,w2,…,wn,w0]

當有兩類的時候用一個判別函數d1(X)即可實現分類,但是對於多類的情況,有三種劃分方式:兩分法,兩分法, 兩分法特例。

2、 兩法用線性判別函數將屬於ωi類的模式與其餘不屬於ωi類的模式分開此法將 M個多類問題分成M個兩類問題,識別每一類均需M個判別函數。識別出所有的M類仍是這M個函數。

(1.1式)

考慮所有的情況,發現上式中並沒有考慮所有的情況,比如沒有考慮到所有的判別式都爲小於零的情況,和多個判別函數同時大於零的情況。下圖考慮了分爲三類的時候,可能出現的情況。

比如當有M類的時候,如果每條判別函數相互不平行而且交點至今沒有重合,X所在的n維空間會被分成(m+1)m/2+1個區域,而只有m個區域裏面的點才能滿足1.1式,而剩下的(m+1)m/2+1-m個區域都無法進行明確的分類。這也是目前存在的問題。

3、兩分法,一個判別界面只能分開兩類,不能把其餘所有的類都分開,判決函數爲dij( X)=WijX,這裏dij=-dji。判別函數的性質dij(X)>0,對所有的j=1…m,若x屬於第i類。這種方法一共需要(m+1)m/2個判別式。

4、兩分法特例,當ωi /ωj兩分法中的判別函數dij(X) ,可以定義爲dij ( X) = di (X)- d j(X)時,那麼di(X)>dj(X)就相當於多類情況2中的dij(X) >0。此時有m個判別函數di(X)=WiX。判別函數的性質爲:di (X)=max{dk(X) k=1…m},若X屬於第i類。可以通過dij ( X) = di (X)- d j(X)發現,這種分類方法只不過是第二種分類方法的特例,如果這種分類方法可分則第二種分類方法必定可分,如果第二種分類方法可分,這種方法未必可分。

二、廣義線性判別函數

在上面曾經提到低維空間的非線性問題可以在高維空間變成線性問題。上面講的所有都是在X所在的空間中線性可分爲前提條件,是因爲即使原始數據D在原來空間線性不可分,我們只需要把低維空間的D擴展到高維空間的X就線性可分了。下面舉兩個例子:

 

比如在二維平面內需要一個正玄曲線y-sin(X)=0才能將數據準確的分割爲兩類。此時數據D=(x,y),如果把數據擴展到更高維度的空間T,T=(x,y,sin(x),sin(y),1),那麼對於T空間的數據肯定可以找到w1x+w1y+w3(sin(X))+w4(sin(y))+w0=0這樣一個線性表達式來使得數據可以劃分。針對在二維空間需要橢圓曲線才能劃分的數據只需要將D=(x,y)擴展到 T=(x,y,x^2,y^2,xy,1)空間,則在T所在的空間就可以將數據線性劃分了。實際上在建模的時候首先要選定的就是要把原始的數據D怎樣擴展到更高維度的空間,數據才能變得線性可分。這是建立模型的關鍵步驟。

三、判別式的求取方法

在上面介紹了模型,也就是建模的時候要做哪些工作。下面的工作就是解模了,這裏介紹了三種求取判別式的方法。分別爲感知器算法、梯度法、最小誤差平方法。接下來介紹的三種方法都是以兩類爲例介紹的。

1、感知器算法

感知器算法算是一種最簡單的算法了,基本上就是一種錯了就改的思想,就像是教育小孩子對了的話就告訴他對了不用改正,錯了的話就要向正確的方向改正一樣。兩類線性可分的模式類:w1,w2 ,線性判別函數d(X),若d(X)>0,則X屬於w1,若d(X)<0,則X屬於w2.首先將數據增加一個維度,所有數據在此維度上的值都是1。然後將屬於w2類的數據全部乘上-1,這樣處理後的樣本記爲X’,那麼對於X’中的任意一組數據都應該滿足d(X’)>0。感知器算法的步驟爲:

第一步:選擇N個分屬於ω1和 ω2類的模式樣本構成訓練樣本集{X1, …, XN}進行增廣(擴展一個維度,所有數據在此維度上的值都爲1)和規範化處理(上面所說的對於d(X)<0的情況,數據乘以-1的操作)。任取權向量初始值W(1),開始迭代。迭代次數k=1 。

第二步:用全部訓練樣本進行一輪迭代,計算W (k)Xi的值,並修正權向量。分兩種情況,更新權向量的值:若W (k)Xi≤ 0,分類器對第i個模式做了錯誤分類,權向量校正爲:W(k +1) = W(k) + cXi,c爲矯正增量爲正值,這個值需要自己設定。若W (k)Xi> 0,表示分類正確則不需要改變權向量:W(k +1) = W(k)

統一寫爲:若W (k) Xi> 0,分類正確,權向量不變:W(k +1) = W(k)

W (k) Xi <= 0,分類錯誤,權向量改變:W(k +1) =W(k) + cXi

第三步:分析分類結果:只要有一個錯誤分類,回到第二步,直至對所有樣本正確分類。

對於爲什麼在判斷錯的時候要做W(k +1)=W(k) + cXi這樣的改變,W(k +1) Xi= W(k) Xi+c Xi^2,所以W(k +1) Xi> W(k)Xi,代表k+1次的權值在對Xi數據的分類情況有了改善。可以證明算法在模式類別線性可分的時候是收斂的。對於多類的問題感知器算法的基本思想還是不變的:錯了就向好的方向改變,正確就不再改變。

2、梯度法

梯度法一般的規則就是定義損失函數,然後沿着梯度下降使得損失函數下降到極小值點。損失函數定義爲J=0.5sum(|WXi|- WXi),當第一眼看到這個損失函數的時候會感到很詫異,因爲裏面有取絕對值的運算,這種運算是不可導的。下面的Xi代表第i組數據,Xik代表第i組數據的第k維,k=1…n。首先看

同理引入Ti表示的符號,則


所以最後的

 

權值改變公式爲爲步長,就像感知器算法中的c。只需要如此不斷的改變權值,直到權值無法改變即求得了結果。其實通過對比了前面的感知器算法和梯度法會發現,感知器算法每次讀入一組數據就改變一次權值,而上面講的梯度法是所有數據都輸入之後,求得所有的 WXi才改變一次權值。嚴格地說,感知器算法也是梯度法的一種。梯度下降算法改變權值都是通過統一的公式進行調整的,不過我們往往可以控制的是多少組數據改變一次權值,有一組數據改變一次權值的,有所有數據全部輸入改變一次權值的,還有介於兩者之間的K組數據改變一次權值的。如果要詳細瞭解權值的改變方式可以瞭解BP神經網絡中權值具體改變的方法。不過一般都是設置爲輸入K組數據改變一次權值,因爲像感知器算法那樣,每一組數據都改變一次權值,損失函數不是嚴格梯度下降的,容易導致損失函數震盪。而像上面講的那樣把所有數據輸入,求得所有的 WXi才改變一次權值,雖然這樣在 足夠小的理想前提條件下,損失函數會嚴格的下降,但是當訓練數據量很大的時候會造成權值改變速度過慢。所以一般採取折中的方式選擇輸入K組數據改變一次權值,在機器學習中batchsize一般表示K。

3、最小誤差平方法

當把這個方法寫出來的時候,感覺這樣寫好不準確,因爲這種方法其實還是梯度下降法,回想當分成兩類的時候,要求的這樣的一個W,使得滿足WXi>0,i=1…,也就是對所有的Xi都要滿足WXi>0。既然我們要滿足這麼一個條件,那麼WXi=C>0,是不是也恆定滿足這樣的條件呢,C代表隨便一個正的常數。比如C=1的時候,只需要求WXi=1的解即可,求得W必定滿足WXi>0,因爲WXi=1。所有此時轉換爲對方程組的求解了,但是實際問題並不像我們想的那樣簡單,爲什麼?因爲我們求解的參數個數可能遠小於方程組的個數,很有可能根本沒有解,因爲樣本的數量遠大於樣本的維度再正常不過了。所以還是通過定義損失函數來進行求解最好不過,定義損失函數爲J=0.5sum((WXi-1)^2),這時候有人會想C爲什麼要等於1,而不是等於其他常數,其實很簡單,C等於任意一個正整數求得的結果都是一樣的,WXi=1求得W記爲W(1),WXi=2求得W記爲W(2),易知W(2)=2 W(1),所以C無論選取爲哪一個正的常數都無所謂,求得的結果都會滿足WXi>0,而權向量W在方向上是不會變化的。

然後按照不斷的迭代改變權值即可。

四、線性判別函數和SVM

通過看機器學習導論一書可以發現,線性判別函數和支撐向量機SVM放在了同一章節進行講解了,可以發現線性判別函數和支撐向量機SVM是有很多相似的地方的。基本上都離不開線性這個地方,因爲支撐向量機一直解決的問題就是在一個線性可分的空間,如何求出一個超平面將數據最好的分開,注意最好這兩個字,而線性判別函數所做的是在一個線性可分的空間,如何求出一個超平面將數據分開。SVM比線性判別函數多了最好兩個字,因而就相比之下比線性判別函數的求解複雜了好多,看了那麼多關於SVM的資料,感覺最好的就是coursera上面臺大林軒田老師開設的機器學習課程。這兩個模型基本的思想都是在一個低維空間線性不可分的時候,先把低維空間擴展到高維空間,線性判別函數是是找一個分類超平面,而SVM是找一個最好的分類超平面。

發佈了24 篇原創文章 · 獲贊 20 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章