1. 程式人生 > >關於機器學習中支持向量機相關問題

關於機器學習中支持向量機相關問題

機器學習 支持向量機 svm 線性感知機 核方法

前言

在機器學習中,分類問題占了很大一部分,而對於分類問題的處理有很多方法,比如決策樹、隨機森林、樸素貝葉斯、前饋神經網絡等等;而最為常見的分類需求一般是二分類問題,即將樣本分為兩個集合,然後通過學習某些參數,對新的輸入進行識別並劃分到正確的類別中。

在解決分類問題中,應該說線性分類器就是最為簡單的一類,雖然說起來較為簡單,但其能處理的情況還是比較多的,而最為常用的一種線性分類器就是所謂的支持向量機(Support Vector Machine,簡稱SVM);其基本原理就是構建一個(對於而分類而言,如是多分類則顯然不止一個)超平面,這個平面能盡量將兩類樣本進行分離,從而達到分類的目的,通過這些描述可知支持向量機所需要學習的東西其實就是這個超平面的相關系數。

其實關於支持向量機的討論或論述已經非常多,但筆者感覺可能還沒有十分全面的介紹,故本文主要從以下幾個方面對支持向量機說明:

其一,對線性分類器進行一定的討論,並重新證明下一個重要定理,即Novicoff定理,此定理在線性感知器以及支持向量機中有著重要的地位,但可能一般讀者觀其傳統證明過程(發表於1962年)會有些困惑;

其二,對支持向量機的本身原理進行描述,給出求解的目標函數(這個部分大多數文章都有);

其三,對相關核方法進行討論,包括一些常用的核方法,如多項式核方法、徑向核(即RBF,主要是高斯核)等,對多核方法也會有一些涉及;

其四,專註於討論支持向量機目標函數的求解,主要是使用流行的

SMO算法(這部分網上相關文章也討論的比較多,但推導過程可能有些復雜或含混,不是很一目了然),並討論下第一和第二變量的選擇方法;

其五,比較簡單的對支持向量機在多分類場景的應用進行一些討論。

線性二分類

應該說在所有函數中,常數函數應該是最為簡單的函數,但它對樣本的識別能力有限,一般不太可能使用它來作為分類的函數,故限免可以考慮來作為分類函數的、較為簡單的一類就是線性函數了。一般而言對於形如:

技術分享

的函數被稱作線性判別函數,其中Sim是相似性函數,即表明x對於類別Yi的歸屬情況(使用Y是為了和輸入區分,因為樣本輸入不一定和輸出的形式一樣;這裏樣本的輸入集合使用X),而wi0其實是偏置,可以認為在其它公式中,就是那個b。那麽有了這個公式,按照一般原則而言,我們可以定義最為簡單的情況,即二分類線性判別函數,如下式所給出:

技術分享

其可以決策的超平面為:

技術分享

技術分享


這個結論和之前的形式其實是完全相同的。即利用這個判定超平面將樣本中的正例和負例進行分離;這裏暫不討論多分類的線性判定問題,待完全給出了支持向量機的所有內容再進行一般性的說明(多分類問題,在現階段下最好不要使用支持向量機,有其他算法可以處理)。

在給出了線性判別函數後,如何通過訓練將每類的類進行標識,就是線性感知機(Linear Perceptron)算法,本部分也不會具體討論其算法過程,這個留到闡述支持向量機的時候再詳細描述(其實是在SMO算法中),這裏僅給出一些基本的內容並證明一個重要定理。

根據對象歸類原理可知,感知機歸類判別的依據就是找到最優的類預測函數,即尋找能將輸入訓練集中正負實例分開的超平面;因此對於同一個樣本,其輸入的類標應和輸出的類標如果一致,則其類內差異應為0,如果不一致則該錯誤樣本應距離超平面越近越好,否則如果離超平面越遠則錯誤越大。以下定義類內差異(xkt表示輸入,ykt表示輸出):

技術分享


其中uk是類別歸屬標識(在支持向量機中就是1-1),而我們記技術分享為其中錯誤分類樣本到超平面的距離。

顯然,對於感知機來說,針對誤分類的樣本而言其值是小於0的,而正確分類(無論是正例還是負例)的樣本是大於0的,因此可得感知機對歸類判別依據為最小化如下之公式(針對所有樣本):

技術分享

由於任意正確分類樣本會使得求和函數中每一項都為0,故可以簡化錯誤分類樣本到超平面的距離為:

技術分享


其中M是錯誤分類樣本的集合。為了學習決策超平面,最小化公式8就是求解參數wb的過程。

故在感知機算法就是通過如下方式更新這兩個參數的(對公式8wb分別求導後可得):

技術分享


其中η為步長,又被稱作學習率,通過不斷地叠代是歸類判據最小化。以上就是線性感知機算法的一個比較原始的形式(正常的支持向量機其實是處理其對偶形式再加上懲罰系數及松弛變量)。

在結束本節前,我們再來看一個非常重要的定理,它論述了這個算法的收斂性,這就是Novicoff定理,如下:

Novicoff定理:樣本訓練集X={x1,x2,...,xN}及其對應的類標集合U={u1,u2,...,uN}線性可分,其中樣本是p維實數空間的點,而類標取值為-11,則:


技術分享

關於此定理的論證在李航的《統計學習方法》一書中也有證明,筆者以下的證明是結合了這本書的相關內容以及原作者給出的證明。

技術分享

技術分享

技術分享

技術分享


Novicoff定理的內容來看,第一部分主要描述的是線性可分性(這個和描述極限有點類似,總是存在一個足夠小的量,當然這裏是離散的);第二部分主要描述的是算法一定會在有限步內結束。筆者認為直觀上講,其叠代步驟的多少至多和具有最大範數的樣本有關(應該就是最遠點)。

支持向量機

在比較簡單地闡述完線性二分類問題以及證明了線性感知機算法的收斂定理後,以下正式討論支持向量機的相關內容,但一種針對支持向量機的、比較理想的求解算法將單獨介紹;本節主要論述支持向量機的一些概念和目標函數的推導過程。

線性可分支持向量機

技術分享

下利用點到平面的距離公式可以得出樣本距兩類判別平面的距離為:

技術分享

以上兩個超平面相互平行,沒有樣本點落入這個區間內,分離超平面恰位於這兩個平面中央(即到兩個平面的距離是完全相同的),而w就是超平面的法向量,所以w就是所謂的支持向量。因此,線下行可分支持向量機的原始目標函數是:

技術分享

對於上式,由於w在分母,故不太好求,我們求解其對偶問題,即:

技術分享

可以從公式12中看出,這實際上是一個凸二次規劃最優化問題,使用拉格朗日乘子,將原始優化問題改寫成非約束的拉格朗日函數:

技術分享

因此目標函數變為:


技術分享

可以看出,經過一定的推演後,目標函數變成只含一種變量的形式。

近似線性可分支持向量機

在解決實際問題時,其實很多數據是線性不可分的,此時線性可分支持向量機就無效了。當然造成線性不可分的原因很多(可能數據需要放在更高維度方可分離),如果我們假設可以剔除其中一部分數據後還能保持線性可分,那麽就是近似線性可分支持向量機。所謂近似線性可分是針對那些異常樣本不滿足與類判別超平面的間隔大於等於1,為解決此問題,定義一種所謂的松弛變量技術分享來表達間隔的差距,這個也被稱作軟間隔。當然如果這個值為0則樣本沒有問題,否則如過其在01之間則樣本分類正確,但距離超平面過近,而如果它大於等於1則樣本分類錯誤(從圖形上看樣本點已經遊離到另外一個分類中了)。

為了解決這個問題,需在原目標函數的基礎之上增加一項,變為如下形式:

技術分享


其中C被稱為懲罰系數(它大於等於0),其值越大懲罰力度越大;它和支持向量的範數大小也有一定的關系。

同樣地,按照上節的方法把公式17的優化問題轉化成其對偶問題,可得加入拉格朗日乘子的目標函數如下:

技術分享

在上式中,為了同時保證技術分享的非負性,故增加了一個參數技術分享。分別對上式的相關參數求取偏導數並帶回,可得如下公式:

技術分享


通過比較公式19和公式16,可知其主要不同就在於參數技術分享被限定在了一個更為狹窄的空間,這個可以在後面的SMO算法中充分地體現出來。

對於這個支持向量的求解,主要就是針對公式19而言的,但是因為某些原因,這個形式還不是最終的目標函數,只能說是非常接近,因為在實際使用中,它無法解決所有相關二分類的問題,這就引出了關於核方法的內容。

數據升維——核方法

在之前的討論中,我們用於劃分類別的是超平面,而且是使用線性函數表達的超平面(實際上是支持向量及截距),而基於線性函數的分類方法畢竟比較簡單,無法處理另外一些線性不可分的情況(這個不是指一些異常點),或者是完全不可分,比如一類數據被另一類數據包裹,此時只要我們將這兩類數據進行一定程度的維度變換(就是升維),就可以區分這種情況,比如在二維情況下,被包裹數據和包括數據在z軸進行分離。

那麽應該如何比較方便地處理升維這種情況?BoserGuyonVapnik為解決這個問題引入了核方法(當然在目前,核方法的應用更為廣泛,不再限於支持向量機),該方法將訓練數據通過非線性變換映射到更到的維度,那麽利用核方法就可以設計非線性的支持向量機。

簡而言之,其形式化的表達如下

技術分享


即對於具有p維的樣本點,將其通過函數轉換進行映射,映射後的維度為d,這裏d是大於p的。

那麽這個進行轉換的函數就被成為核函數,對於支持向量機言,經過轉換後(即輸出)的線性判別函數就是:

技術分享


在知道這個特征映射的情況下,可以通過計算上述內積得到核函數。不過在很多情況下核函數容易構造,而技術分享很難得到,因此這裏就自然而然的有個問題需要解決,什麽樣的函數可以被用來作為核函數?

關於這個問題其實早有定論,就是能作為核函數的函數其構造出來的Gram矩陣是半正定的(這是充分必要條件),Gram矩陣就是技術分享,這個定理被稱作Mercer定理。

以下給出幾個常用的核函數:

1.q次多項式:

技術分享

技術分享

從上面給出的特征映射函數可以看出它將數據從2維轉換成了6維。

2.徑向基函數(Radius Basis Function,簡稱RBF

徑向基函數可能最為常用的一種核函數,其形式如下:

技術分享


此函數定義的是球形核(又被稱作高斯核),而技術分享為中心,技術分享是球的半徑,這個半徑可以作為參數自由定義。而這個函數的特征映射函數稍微復雜點,需要通過泰勒公式進行展開而得到,它具有將數據升成任意維度的能力。

3.S形函數

S形函數定義如下(利用雙曲正切):

技術分享

其中c和γ可以定義。

在比較簡單地討論完核函數後,最終給出支持向量機的目標函數如下:

技術分享


與公式19相比較,可以發現在此公式中增加了使用核函數的部分。

在結束核方法的說明之前,我們再簡單地討論下多核方法(本文其實還用不到)。因為在解決實際時,可能只使用一個核方法還是無法達到目的,這時我們可以利用一些方法對其擴展,增加其它核方法,例如乘以一個常數、將兩個核方法相加或將兩個核方法相乘,以產生新的核方法,其中一種常用的方法是利用累加法,如下:

技術分享


在上式中,m是被合成的核函數的數量,而加入限制是為了保證合成後的函數的凸性。故如果用公式30來替換公式29的對應部分,就能得到一個更為通用的支持向量機目標函數:

技術分享

SMO方法求解目標函數

如果不使用感知器算法求取目標函數的解,那是否有更好、更快的方法得到公式29的解?SMOSequential Minimal Optimization,即序列最小優化)算法就是為了解決這個問題而提出的,目前它是最快的二次規劃算法。

目標函數變形

由於已將其化為了對偶形式,故對於公式29我們需要求解的參數只有一種,就是一個維度為N的向量(即拉格朗日乘子),按照解決這類問題的一般思路可以固定其它N-1個參數,然後求取另外一個,但是這個和約束相沖突(這個約束是技術分享,即如果只固定其中一個參數,則這個參數實際上可以由其它參數來表達,所以它也被固定住了),那麽換個思路,就是我們選取其中兩個參數進行求解,則公式變形為如下形式:


技術分享


不失一般性的,公式32就是把這兩個參數設定為技術分享技術分享,而且Const是一個常數項,因其不包含這兩個變量,在後面的求導過程中可以忽略。

由於只有兩個變量,我們利用約束可以得到:

技術分享

技術分享


可以看出,通過公式36得到技術分享的解,然後再將其帶回到公式34則能夠得到參數技術分享的解,但這種表達方式過於復雜,現做一些調整。

現定義誤差(即樣本真實值和預測值之間的差):

技術分享


至此我們得到了關於參數的解,但它是未經剪裁的(這就是為什麽參數上會被標識為unclipped),即還需要使用約束條件對其進一步處理。

參數剪裁及邊界處理

由於對公式41所得到的結果未考慮其應被約束在一個固定範圍內,故需要對其進行剪裁,這個約束就是:

技術分享

這個在圖像上的表現就是其取值必須在一個限定的正方形內,正方形的邊長就是C。如果取值在其內則可根據第二個約束(這是一個直線)得到相應的值,否則只能取0或者C,具體如下:

技術分享

技術分享

在大多數情況下η都是大於零的,但如果其小於零該如何取值?這個問題可以這樣理解即η實際上是公式36求取二階導數的值,當其小於零時函數不再保持凸性,故其無法得到極值,也就是說這個違反了Mercer定理,矩陣不再是半正定的;而如果其等於零(無定義了),則說明兩個樣本的輸入特征相同。對於這兩種情況而言,函數都應該在邊界上取值。

技術分享


其它問題

技術分享

技術分享

在結束這些討論之前,還有個問題需要說明,就是在SMO算法中如何選取這兩個變量,選擇?或者說選擇的順序和邏輯是什麽?那麽根據原作者給出的偽代碼可以看出其流程是這樣的:

這種啟發式的搜索的邏輯是先選擇違背KKT條件的那個參數,而根據Osuna定理可知目標函數在一步叠代後就會減小;但是違背了KKT條件並不代表其值會在被限定的區域內(就是大於0而小於C),在界上的也可能會違背,因此算法會對所有樣本進行搜索,只要遇到KKT違反的都會更新,如果沒有收斂,則後面只針對界內的樣例進行叠代,這是對於第一個參數的處理,而針對第二個參數而言,則選擇能最大化之間誤差的那個樣本,即選取Max(|E2-E1|)對應之樣本。

多分類支持向量機

在本文的最後再來簡單地討論下關於多分類的支持向量機。

假定樣本中包含了c類,就是說樣本有c個類標,而不是兩個,每個類都有線性判別式可以將某類和其它類別相區分,那麽最終就有c個線性判別式,如下:


技術分享

這些判別式表明對於每個類而言,都存在一個超平面,使得相應的樣本點都在該超平面的正側。當然這是一種比較理想的情況,而在現實中顯然很難滿足這樣的要求,超平面的正側經常會出現重疊的情況,同時還可能出現對於某個輸入x的所有判別式的結果都小於0,這樣這個樣本就無法被劃分到任何一類,對於這種情況,可以做如下處理:將它劃分到判別函數值最大的那個類中。

以上的判別方式是處理多分類情況的一種,還有一種處理多分類情況的方法,即兩兩判別法,相應的公式如下:

技術分享













關於機器學習中支持向量機相關問題