1. 程式人生 > >svm支援向量機的原理

svm支援向量機的原理

 (很詳細的SVM的原理講解,copy下來備忘)

[-]

            支援向量機通俗導論(理解SVM的三層境界)

作者:July、pluskid ;致謝:白石、JerryLead
出處:結構之法演算法之道blog

前言

    動筆寫這個支援向量機(support vector machine)是費了不少勁和困難的,原因很簡單,一者這個東西本身就並不好懂,要深入學習和研究下去需花費不少時間和精力,二者這個東西也不好講清楚,儘管網上已經有朋友寫得不錯了(見文末參考連結),但在描述數學公式的時候還是顯得不夠。得益於同學白石的數學證明,我還是想嘗試寫一下,希望本文在兼顧通俗易懂的基礎上,真真正正能足以成為一篇完整概括和介紹支援向量機的導論性的文章。

    本文在寫的過程中,參考了不少資料,包括《支援向量機導論》、《統計學習方法》及網友pluskid的支援向量機系列等等,於此,還是一篇學習筆記,只是加入了自己的理解和總結,有任何不妥之處,還望海涵。全文巨集觀上整體認識支援向量機的概念和用處,微觀上深究部分定理的來龍去脈,證明及原理細節,力求深入淺出 & 通俗易懂。

    同時,閱讀本文時建議大家儘量使用chrome等瀏覽器,如此公式才能更好的顯示,再者,閱讀時可拿張紙和筆出來,把本文所有定理.公式都親自推導一遍或者直接列印下來(可直接列印網頁版或本文文末貼的這個PDF:http://vdisk.weibo.com/s/zrFL6OXKghu5V

,享受隨時隨地思考、演算的極致快感),在文稿上演算

    Ok,還是那句原話,有任何問題,歡迎任何人隨時不吝指正 & 賜教,感謝。

第一層、瞭解SVM

1.0、什麼是支援向量機SVM

    要明白什麼是SVM,便得從分類說起。

    分類作為資料探勘領域中一項非常重要的任務,它的目的是學會一個分類函式或分類模型(或者叫做分類器),而支援向量機本身便是一種監督式學習的方法(),它廣泛的應用於統計分類以及迴歸分析中。

    支援向量機(SVM)是90年代中期發展起來的基於統計學習理論的一種機器學習方法,通過尋求結構化風險最小來提高學習機泛化能力,實現經驗風險和置信範圍的最小化,從而達到在統計樣本量較少的情況下,亦能獲得良好統計規律的目的。

    對於不想深究SVM原理的同學或比如就只想看看SVM是幹嘛的,那麼,瞭解到這裡便足夠了,不需上層。而對於那些喜歡深入研究一個東西的同學,甚至究其本質的,咱們則還有很長的一段路要走,萬里長征,咱們開始邁第一步吧,相信你能走完。

1.1、線性分類

    OK,在講SVM之前,咱們必須先弄清楚一個概念:線性分類器(也可以叫做感知機,這裡的機表示的是一種演算法,本文第三部分、證明SVM中會詳細闡述)。

1.1.1、分類標準

    這裡我們考慮的是一個兩類的分類問題,資料點用 x 來表示,這是一個 n 維向量,w^T中的T代表轉置,而類別用 y 來表示,可以取 1 或者 -1 ,分別代表兩個不同的類。一個線性分類器就是要在 n 維的資料空間中找到一個超平面,其方程可以表示為:

                                                           

上面給出了線性分類的定義描述,但或許讀者沒有想過:為何用y取1 或者 -1來表示兩個不同的類別呢?其實,這個1或-1的分類標準起源於logistic迴歸,為了完整和過渡的自然性,咱們就再來看看這個logistic迴歸。

1.1.2、1或-1分類標準的起源:logistic迴歸

    Logistic迴歸目的是從特徵學習出一個0/1分類模型,而這個模型是將特性的線性組合作為自變數,由於自變數的取值範圍是負無窮到正無窮。因此,使 用logistic函式(或稱作sigmoid函式)將自變數對映到(0,1)上,對映後的值被認為是屬於y=1的概率。    形式化表示就是    假設函式
   其中x是n維特徵向量,函式g就是logistic函式。   而的影象是
   可以看到,將無窮對映到了(0,1)。    而假設函式就是特徵屬於y=1的概率。
    當我們要判別一個新來的特徵屬於哪個類時,只需求,若大於0.5就是y=1的類,反之屬於y=0類。    再審視一下,發現只和有關,>0,那麼,g(z)只不過是用來對映,真實的類別決定權還在。還有當時=1,反之=0。如果我們只從出發,希望模型達到的目標無非就是讓訓練資料中y=1的特徵,而是y=0的特徵。Logistic迴歸就是要學習得到,使得正例的特徵遠大於0,負例的特徵遠小於0,強調在全部訓練例項上達到這個目標。

1.1.3、形式化標示

     我們這次使用的結果標籤是y=-1,y=1,替換在logistic迴歸中使用的y=0和y=1。同時將替換成w和b。以前的,其中認為。現在我們替換為b,後面替換(即)。這樣,我們讓,進一步。也就是說除了y由y=0變為y=-1,只是標記不同外,與logistic迴歸的形式化表示沒區別。    再明確下假設函式
    上面提到過我們只需考慮的正負問題,而不用關心g(z),因此我們這裡將g(z)做一個簡化,將其簡單對映到y=-1和y=1上。對映關係如下:    於此,想必已經解釋明白了為何線性分類的標準一般用1 或者-1 來標示。    注:上小節來自jerrylead所作的斯坦福機器學習課程的筆記。

1.2、線性分類的一個例子

    下面舉個簡單的例子,一個二維平面(一個超平面,在二維空間中的例子就是一條直線),如下圖所示,平面上有兩種不同的點,分別用兩種不同的顏色表示,一種為紅顏色的點,另一種則為藍顏色的點,紅顏色的線表示一個可行的超平面。

    從上圖中我們可以看出,這條紅顏色的線把紅顏色的點和藍顏色的點分開來了。而這條紅顏色的線就是我們上面所說的超平面,也就是說,這個所謂的超平面的的確確便把這兩種不同顏色的資料點分隔開來,在超平面一邊的資料點所對應的 y 全是 -1 ,而在另一邊全是 1 。

    接著,我們可以令分類函式(提醒:下文很大篇幅都在討論著這個分類函式

    顯然,如果 f ,那麼 x 是位於超平面上的點。我們不妨要求對於所有滿足 f 的點,其對應的 y 等於 -1 ,而 f 則對應 y 的資料點。

    注:上圖中,定義特徵到結果的輸出函式與我們之前定義的實質是一樣的。

    (有一朋友飛狗來自Mare_Desiderii,看了上面的定義之後,問道:請教一下SVM functional margin 為=y(wTx+b)=yf(x)中的Y是隻取1和-1 嗎?y的唯一作用就是確保functional margin的非負性?真是這樣的麼?當然不是,詳情請見本文評論下第43樓

    當然,有些時候,或者說大部分時候資料並不是線性可分的,這個時候滿足這樣條件的超平面就根本不存在(不過關於如何處理這樣的問題我們後面會講),這裡先從最簡單的情形開始推導,就假設資料都是線性可分的,亦即這樣的超平面是存在的。
    更進一步,我們在進行分類的時候,將資料點 x代入 f 中,如果得到的結果小於 0 ,則賦予其類別 -1 ,如果大於 0 則賦予類別 1 。如果 f,則很難辦了,分到哪一類都不是。

請讀者注意,下面的篇幅將按下述3點走:

  1. 咱們就要確定上述分類函式f(x) = w.x + b(w.x表示w與x的內積)中的兩個引數w和b,通俗理解的話w是法向量,b是截距(再次說明:定義特徵到結果的輸出函式與我們最開始定義的實質是一樣的);
  2. 那如何確定w和b呢?答案是尋找兩條邊界端或極端劃分直線中間的最大間隔(之所以要尋最大間隔是為了能更好的劃分不同類的點,下文你將看到:為尋最大間隔,匯出1/2||w||^2,繼而引入拉格朗日函式和對偶變數a,化為對單一因數對偶變數a的求解,當然,這是後話),從而確定最終的最大間隔分類超平面hyper plane和分類函式;
  3. 進而把尋求分類函式f(x) = w.x + b的問題轉化為對w,b的最優化問題,最終化為對偶因子的求解。

    總結成一句話即是:從最大間隔出發(目的本就是為了確定法向量w),轉化為求對變數w和b的凸二次規劃問題。亦或如下圖所示(有點需要注意,如讀者@醬爆小八爪所說:從最大分類間隔開始,就一直是凸優化問題):

1.3、函式間隔Functional margin與幾何間隔Geometrical margin 

    一般而言,一個點距離超平面的遠近可以表示為分類預測的確信或準確程度。

  • 在超平面w*x+b=0確定的情況下,|w*x+b|能夠相對的表示點x到距離超平面的遠近而w*x+b的符號與類標記y的符號是否一致表示分類是否正確,所以,可以用量y*(w*x+b)的正負性來判定或表示分類的正確性和確信度。

    於此,我們便引出了定義樣本到分類間隔距離的函式間隔functional margin的概念。

1.3.1、函式間隔Functional margin

    我們定義函式間隔functional margin 為: 

      接著,我們定義超平面(w,b)關於訓練資料集T的函式間隔為超平面(w,b)關於T中所有樣本點(xi,yi)的函式間隔最小值,其中,x是特徵,y是結果標籤,i表示第i個樣本,有:

  mini  (i=1,...n)

    然與此同時,問題就出來了。上述定義的函式間隔雖然可以表示分類預測的正確性和確信度,但在選擇分類超平面時,只有函式間隔還遠遠不夠,因為如果成比例的改變w和b,如將他們改變為2w和2b,雖然此時超平面沒有改變,但函式間隔的值f(x)卻變成了原來的4倍。

    其實,我們可以對法向量w加些約束條件,使其表面上看起來規範化,如此,我們很快又將引出真正定義點到超平面的距離--幾何間隔geometrical margin的概念(很快你將看到,幾何間隔就是函式間隔除以個||w||,即yf(x) / ||w||)。

1.3.2、點到超平面的距離定義:幾何間隔Geometrical margin

    在給出幾何間隔的定義之前,咱們首先來看下,如上圖所示,對於一個點 x ,令其垂直投影到超平面上的對應的為 x ,由於 w 是垂直於超平面的一個向量,為樣本x到分類間隔的距離,我們有

              (||w||表示的是範數,關於範數的概念參見這裡

    又由於 x 是超平面上的點,滿足 f ,代入超平面的方程即可算出


γ

(有的書上會寫成把||w|| 分開相除的形式,如本文參考文獻及推薦閱讀條目11,其中,||w||為w的二階泛數)

不過這裡的是帶符號的,我們需要的只是它的絕對值,因此類似地,也乘上對應的類別 y即可,因此實際上我們定義幾何間隔geometrical margin 為(注:別忘了,上面的定義,=y(wTx+b)=yf(x) )

    (代人相關式子可以得出:yi*(w/||w|| + b/||w||))

    正如本文評論下讀者popol1991留言:函式間隔y*(wx+b)=y*f(x)實際上就是|f(x)|,只是人為定義的一個間隔度量;而幾何間隔|f(x)|/||w||才是直觀上的點到超平面距離。

    想想二維空間裡的點到直線公式:假設一條直線的方程為ax+by+c=0,點P的座標是(x0,y0),則點到直線距離為|ax0+by0+c|/sqrt(a^2+b^2)。如下圖所示:
                                 
    那麼如果用向量表示,設w=(a,b),f(x)=wx+c,那麼這個距離正是|f(p)|/||w||。

1.4、最大間隔分類器Maximum Margin Classifier的定義

    於此,我們已經很明顯的看出,函式間隔functional margin 和 幾何間隔geometrical margin 相差一個的縮放因子。按照我們前面的分析,對一個數據點進行分類,當它的 margin 越大的時候,分類的 confidence 越大。對於一個包含 n 個點的資料集,我們可以很自然地定義它的 margin 為所有這 n 個點的 margin 值中最小的那個。於是,為了使得分類的 confidence 高,我們希望所選擇的超平面hyper plane 能夠最大化這個 margin 值。

    通過上節,我們已經知道:

1、functional margin 明顯是不太適合用來最大化的一個量,因為在 hyper plane 固定以後,我們可以等比例地縮放 w 的長度和 b 的值,這樣可以使得的值任意大,亦即 functional margin可以在 hyper plane 保持不變的情況下被取得任意大,

2、而 geometrical margin 則沒有這個問題,因為除上了這個分母,所以縮放 w 和 b 的時候的值是不會改變的,它只隨著 hyper plane 的變動而變動,因此,這是更加合適的一個 margin 。

    這樣一來,我們的 maximum margin classifier 的目標函式可以定義為:

    當然,還需要滿足一些條件,根據 margin 的定義,我們有

    其中 (等價於 /||w||,故有稍後的  =1 時,  = 1 / ||w||),處於方便推導和優化的目的,我們可以令=1(對目標函式的優化沒有影響,至於為什麼,請見本文評論下第42樓回覆) ,此時,上述的目標函式化為(其中,s.t.,即subject to的意思,它匯出的是約束條件)

    通過求解這個問題,我們就可以找到一個 margin 最大的 classifier ,如下圖所示,中間的紅色線條是 Optimal Hyper Plane ,另外兩條線到紅線的距離都是等於(便是上文所定義的geometrical margin,當=1時,便為1/||w||,而我們上面得到的目標函式便是在相應的約束條件下,要最大化這個1/||w||值)

    通過最大化 margin ,我們使得該分類器對資料進行分類時具有了最大的 confidence,從而設計決策最優分類超平面。

1.5、到底什麼是Support Vector

    上節,我們介紹了Maximum Margin Classifier,但並沒有具體闡述到底什麼是Support Vector,本節,咱們來重點闡述這個概念。咱們不妨先來回憶一下上節1.4節最後一張圖:

    可以看到兩個支撐著中間的 gap 的超平面,它們到中間的純紅線separating hyper plane 的距離相等,即我們所能得到的最大的 geometrical margin,而“支撐”這兩個超平面的必定會有一些點,而這些“支撐”的點便叫做支援向量Support Vector。

    很顯然,由於這些 supporting vector 剛好在邊界上,所以它們滿足還記得我們把 functional margin 定為 1 了嗎?上節中:“處於方便推導和優化的目的,我們可以=1),而對於所有不是支援向量的點,也就是在“陣地後方”的點,則顯然有當然,除了從幾何直觀上之外,支援向量的概念也可以從下文優化過程的推導中得到。

    OK,到此為止,算是瞭解到了SVM的第一層,對於那些只關心怎麼用SVM的朋友便已足夠,不必再更進一層深究其更深的原理。

第二層、深入SVM

2.1、從線性可分到線性不可分

2.1.1、從原始問題到對偶問題的求解

    雖然上文1.4節給出了目標函式,卻沒有講怎麼來求解。現在就讓我們來處理這個問題。回憶一下之前得到的目標函式(subject to匯出的則是約束條件)

     由於求的最大值相當於求的最小值,所以上述問題等價於(w由分母變成分子,從而也有原來的max問題變為min問題,很明顯,兩者問題等價):

  1. 到這個形式以後,就可以很明顯地看出來,它是一個凸優化問題,或者更具體地說,它是一個二次優化問題——目標函式是二次的,約束條件是線性的。這個問題可以用任何現成的 QP (Quadratic Programming) 的優化包進行求解;
  2. 但雖然這個問題確實是一個標準的 QP 問題,但是它也有它的特殊結構,通過 Lagrange Duality 變換到對偶變數 (dual variable) 的優化問題之後,可以找到一種更加有效的方法來進行求解,而且通常情況下這種方法比直接使用通用的 QP 優化包進行優化要高效得多。

    也就說,除了用解決QP問題的常規方法之外,還可以應用拉格朗日對偶性,通過求解對偶問題得到最優解,這就是線性可分條件下支援向量機的對偶演算法,這樣做的優點在於:一者對偶問題往往更容易求解;二者可以自然的引入核函式,進而推廣到非線性分類問題。
    ok,接下來,你將看到“對偶變數dual variable的優化問題”等類似的關鍵詞頻繁出現,便是解決此凸優化問題的第二種更為高效的解--對偶變數的優化求解。

    至於上述提到,關於什麼是Lagrange duality?簡單地來說,通過給每一個約束條件加上一個 Lagrange multiplier(拉格朗日乘值),即引入拉格朗日對偶變數,如此我們便可以通過拉格朗日函式將約束條件融和到目標函式裡去(也就是說把條件融合到一個函式裡頭,現在只用一個函式表示式便能清楚的表達出我們的問題)

   然後我們令

    容易驗證,當某個約束條件不滿足時,例如,那麼我們顯然有只要令即可)。而當所有約束條件都滿足時,則有亦即我們最初要最小化的量。因此,在要求約束條件得到滿足的情況下