摘要
python
本文對支持向量機作了簡單介紹,並對線性可分支持向量分類機、線性支持向量分類機以及核函數作了詳細介紹。算法
最近一直在看《機器學習實戰》這本書,由於本身自己很想深刻的瞭解機器學習算法,加之想學python,就在朋友的推薦之下選擇了這本書進行學習,今天學習支持向量機(Support Vector Machines,SVM),這個不管是在模式識別仍是機器學習等領域都赫赫有名的工具。 數據庫
支持向量機是一項藉助於最優化方法來解決機器學習問題的新工具,最初由 V.Vapnik 等人提出,近幾年來其在理論研究和算法實現等方面都取得了很大的進展,開始成爲克服「維數災難」和過學習等困難的強有力的手段。機器學習
一 最大間隔分隔數據 函數
咱們知道分類的目的是學會一個分類器,將數據庫中的數據映射到給定類別中的某一個,實現對未知數據類別的預測。工具
對於二維數據集,將數據集分隔開的直線稱爲分隔超平面,若是分隔的是三維的,分類的就是面,若是是更高維的就是超平面。將分類的決策邊界統稱爲超平面,分佈在超平面一側的全部數據都屬於某個類別,而分佈在另外一側的全部數據都屬於另外一個類別。學習
那麼對於分類而言,合理的構建分類器就尤其重要了,怎樣才能構造分類器使得分類結果更爲可信。下面舉個例子說明:優化
對於左圖座標中的兩類圖形,若是讓你畫一條線,合理的將它們分開,你會如何怎樣劃分?這分法可就多了,到底哪一種分法最好呢?咱們能夠引入一個實際問題:假設這兩類圖形分別代替的是兩個居民區,現要在兩居民區之間修一條路,那麼該怎麼修?我想大多數人都會選擇那條紅線吧,這條路權衡了遠和近,也能夠理解爲折中,相對於每一個點而言都是最公平的。spa
該例子就能夠當作是在樣本中尋找超平面將不一樣類別分開,那麼爲了更好的分類,就要使得不一樣類別之間的間隔最大,(間隔指的是點到分隔面的距離),這樣若是分錯或者在有限數據上訓練分類器的話,也能最大程度的保證分類器的健壯。上述例子是在二維平面中尋找超平面,直接用肉眼就能夠抉擇,然而若是是三維或者更高維的狀況,單憑人類肉眼是無能爲力的,但機智的咱們是能夠經過計算機來尋找啊,經過相應的數學知識,創建對應的數學模型,經過計算機來求解。3d
這種尋找超平面分類思想就是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,因此咱們只須要計算新樣本和少許的訓練樣本的核函數,求和去符號就可完成新樣本的分類了。而採用不一樣的核函數,至關於採用不一樣的類似度對樣本進行分類。
至此,關於支持向量機的相關知識大體就學習完了,以後的一些細節也將繼續學習。