摘要
本文對支持向量機做了簡單介紹,並對線性可分支持向量分類機、線性支持向量分類機以及核函數做了詳細介紹。
最近一直在看《機器學習實戰》這本書,因為自己本身很想深入的了解機器學習算法,加之想學python,就在朋友的推薦之下選擇了這本書進行學習,今天學習支持向量機(Support Vector Machines,SVM),這個無論是在模式識別還是機器學習等領域都赫赫有名的工具。
支持向量機是一項借助於最優化方法來解決機器學習問題的新工具,最初由 V.Vapnik 等人提出,近幾年來其在理論研究和算法實現等方面都取得了很大的進展,開始成為克服“維數災難”和過學習等困難的強有力的手段。
一 最大間隔分隔數據
我們知道分類的目的是學會一個分類器,將數據庫中的數據映射到給定類別中的某一個,實現對未知數據類別的預測。
對於二維數據集,將數據集分隔開的直線稱為分隔超平面,如果分隔的是三維的,分類的就是面,如果是更高維的就是超平面。將分類的決策邊界統稱為超平面,分布在超平面一側的所有數據都屬於某個類別,而分布在另一側的所有數據都屬於另一個類別。
那么對於分類而言,合理的構建分類器就尤為重要了,怎樣才能構造分類器使得分類結果更為可信。下面舉個例子說明:
對於左圖坐標中的兩類圖形,如果讓你畫一條線,合理的將它們分開,你會如何怎樣划分?這分法可就多了,到底哪種分法最好呢?我們可以引入一個實際問題:假設這兩類圖形分別代替的是兩個居民區,現要在兩居民區之間修一條路,那么該怎么修?我想大多數人都會選擇那條紅線吧,這條路權衡了遠和近,也可以理解為折中,相對於每個點而言都是最公平的。
該例子就可以看成是在樣本中尋找超平面將不同類別分開,那么為了更好的分類,就要使得不同類別之間的間隔最大,(間隔指的是點到分隔面的距離),這樣如果分錯或者在有限數據上訓練分類器的話,也能最大程度的保證分類器的健壯。上述例子是在二維平面中尋找超平面,直接用肉眼就可以抉擇,然而如果是三維或者更高維的情況,單憑人類肉眼是無能為力的,但機智的我們是可以通過計算機來尋找啊,通過相應的數學知識,建立對應的數學模型,通過計算機來求解。
這種尋找超平面分類思想就是SVM的思想,下來我們學習支持向量機。
二 支持向量機
用於分類的SVM本質上是一個二類分類模型。SVM屬於監督學習,目的是在給定一個包含正例和反例的樣本集合中尋找一個超平面對樣本中的正例和反例進行分割,同時保證正例和反例之間的間隔最大。這樣使得分類結果更為可信,而且對於未知的新樣本才能有更好的分類預測能力。為了達到類別之間間隔最大,我們不需要考慮所有點,只需要讓離分隔超平面最近的點距離分隔面的距離盡可能遠即可,想想也是很有道理的,這里距離分隔超平面最近的那些點就是支持向量。
下面來講述一下SVM的原理:
首先,需要給定N個訓練樣本:{(x1,y1),(x2,y2)…(xn,yn)},其中x是d維向量,表明了每個樣本具有d個屬性;yi指的是類別,並且yi屬於{-1,1}。目的是尋找一個實值函數g(x),使得可以用分類函數f(x) = sgn(g(x))推斷任意一個樣本x所對應的y值。
(1)線性可分支持向量機
線性可分SVM就是用上述的N個樣本去訓練學習得到一個線性分類器,也就是得到一個超平面:f(x) = sgn(w•x+b),線性可分表明當w•x+b>0時,對應的f(x) = 1,相應的當w•x+b<0時,對應的f(x) = -1,而w•x+b = 0就是所要尋找的超平面,此時對應的超平面為硬間隔超平面。接下來我們就來尋找這個超平面,基於之前的分析,這里我們需要將樣本分成兩類,且保證分隔面到這兩類中最近的點的距離盡可能的遠,下面我們結合數學公式進行分析:
如上圖所示,我們要尋找一個超平面最大的分隔這兩個類,保證這兩個類別之間的距離盡可能大,問題可以轉化為最大化這兩個類別中距離分隔面最近的點(支持向量)之間的距離。
首先,在上圖中找到兩個和這個超平面平行且距離相等的超平面:w•x+b = -1和w•x+b = 1,保證在這兩個超平面之間沒有任何樣本點,很容易想象,這兩個超平面勢必包含的是距離分隔超平面最近的點,那么問題就可轉化為最大化這兩個超平面之間的距離;進而結合相關的數學知識,因為超平面均二維,則它們之間的距離可表示為:d = |1+1|/sqrt(w12 + w22) = 2 / ||w||,問題就是最大化2 / ||w||,可以轉化為最小化||w||;最后結合兩個超平面之間沒有任何樣本點這個約束,則有:對於任何一個正樣本yi=+1,它都要處於w•x+b = 1這個超平面的右邊,即要保證:y= w•x+b>=+1,同理對於任何一個負樣本yi=-1,它都要處於w•x+b=-1的左邊,也就是要保證:y = w•x+b <=-1,於是可以合並為:yi (w•xi+b)>=1。
於是尋找最優超平面的問題就可以轉化為二次規划問題:
min ||w||2/2
s.t. yi (w•xi+b)>=1 i = 1,2,...,N
該問題的特點是目標函數是凸函數(范數均為凸函數),並且約束條件為線性,則可以引入lagrange函數:
進而根據wolf對偶的定義,將原問題的各變量偏導置零有:
進而帶入拉格朗日函數可將問題轉化為原問題的拉格朗日對偶問題:
求解上述問題的最優解,計算w*和b*:
由KKT互補條件可得:
只有當xi為支持向量的時候,對應的ai*才為正,否則皆為0,選擇a*的一個正分量,計算可得:
由此可以構造分類超平面(w*•x)+b* = 0,由此求得決策函數:
進而得到分類函數:
從而對未知類別進行分類。根據KKT的條件,只有當xi為支持向量的時候,對應的ai*才為正,否則皆為0。所以,我們只需求得新來的樣本和支持向量的內積,然后運算即可。
(2)線性支持向量分類機
上面所分析的是樣本點線性可分的情況,我們在尋找硬間隔超平面時,首先是找到了兩個分類邊界,並假定所有的樣本點都在這兩個分類邊界以外,但現實不總是那么盡人意,下面這種情況也勢必會遇到:
這幅圖里正類和負類都有點跑到“另類”的地盤,這時候就找不到一條直線將它們分開了,那要如何才能折中呢?對於這種數據點有一定程度偏離超平面的情況,我們仍然能繼續使用超平面進行划分,只是這時要對間隔進行“軟化” ,構造軟間隔超平面。簡言之就是在兩個分類邊界之間允許出現樣本點,這類樣本點被稱為邊界支持向量。 這種向量機成為線性支持向量分類機,如下圖所示:
上面提到需要對該問題“軟化“,那么如何軟化呢,就是要引入松弛變量:
從而得到軟化之后針對於原問題的約束條件為:
松弛變量的設置,允許了某些樣本點出現在對方的區域中,當松弛變量充分大時,樣本點總是滿足上述的約束條件,但也是要設法避免取值太大。為此我們可以重新調整目標函數,引入懲罰因子C,對離群點進行懲罰,則二次規划問題轉化為:
,其中,C>0
對應的拉格朗日函數為:
對應原問題的對偶問題為:
我們發現與線性可分模型中知識多了C>=a這個約束條件,按照之前的方法,同理計算得:
分類函數為:
其中 C為無窮大時,就等價於線性可分的情形。
(3) 核函數
上面講述的是線性支持向量分類機,其中允許一定程度上的離群點,那若是樣本點真的是線型不可分呢,那就得采用核函數進行處理了。
聯系到T.M.Cover的模式可分性定理:一個復雜的模式分析問題映射到高維空間后,會比在低維空間線性可分。核方法就是通過非線性映射將原始數據通過特征映射嵌入到新的特征空間(Hilbert空間),發現數據在特征空間上的線性模式,進而選取相應的核函數利用輸入計算內積。根據對偶解法可得算法所需要的信息位於特征空間上數據點之間的內積,維數過大時會影響算法的高效性,所以,將內積作為輸入特征的直接函數,更高效的計算內積,減少了算法的時間復雜度。
常用的核函數有:
基於上述分析,對於線性不可分的樣本點,問題就轉化為在Hilbert空間中尋找超平面:,相應的轉化為二次規划問題:
其中核函數K滿足條件:
我們再次選用RBF核函數,得到拉格朗日對偶問題:
相應的計算求得分類函數為:
接下來就可以據此對線性不可分問題進行分類了。因為大多數的a*是0,所以我們只需要計算新樣本和少量的訓練樣本的核函數,求和去符號就可完成新樣本的分類了。而采用不同的核函數,相當於采用不同的相似度對樣本進行分類。
至此,關於支持向量機的相關知識大致就學習完了,之后的一些細節也將繼續學習。