1. 程式人生 > >支援向量機通俗導論 理解SVM的三層境界

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

               

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

作者:July 。致謝:pluskid、白石、JerryLead。說明:本文最初寫於2012年6月,而後不斷反反覆覆修改&優化,修改次數達上百次,最後修改於2016年11月。宣告:本文於2012年便早已附上所有參考連結,並註明是篇“學習筆記”,且寫明具體參考了pluskid等人的文章。文末2013年的PDF是為證。

前言

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

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

    同時,閱讀本文時建議大家儘量使用chrome等瀏覽器,如此公式才能更好的顯示,再者,閱讀時可拿張紙和筆出來,把本文所有定理.公式都親自推導一遍或者直接列印下來(可直接列印網頁版或本文文末附的PDF)在文稿上演算,從而享受隨時隨地思考、演算的極致快感。

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

第一層、瞭解SVM

    支援向量機,因其英文名為support vector machine,故一般簡稱SVM,通俗來講,它是一種二類分類模型,其基本模型定義為特徵空間上的間隔最大的線性分類器,其學習策略便是間隔最大化,最終可轉化為一個凸二次規劃問題的求解。

1.1、分類標準的起源:Logistic迴歸

    理解SVM,咱們必須先弄清楚一個概念:線性分類器。

    給定一些資料點,它們分別屬於兩個不同的類,現在要找到一個線性分類器把這些資料分成兩類。如果用x表示資料點,用y表示類別(y可以取1或者-1,分別代表兩個不同的類),一個線性分類器的學習目標便是要在n維的資料空間中找到一個超平面(hyper plane),這個超平面的方程可以表示為( wT中的T代表轉置):

                                                           

    可能有讀者對類別取1或-1有疑問,事實上,這個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,而且要在全部訓練例項上達到這個目標。

    接下來,嘗試把logistic迴歸做個變形。首先,將使用的結果標籤y = 0和y = 1替換為y = -1,y = 1,然後將)中的替換為b,最後將後面的替換為(即)。如此,則有了。也就是說除了y由y=0變為y=-1外,線性分類函式跟logistic迴歸的形式化表示沒區別。

    進一步,可以將假設函式中的g(z)做一個簡化,將其簡單對映到y=-1和y=1上。對映關係如下:

1.2、線性分類的一個例子

    下面舉個簡單的例子。如下圖所示,現在有一個二維平面,平面上有兩種不同的資料,分別用圈和叉表示。由於這些資料是線性可分的,所以可以用一條直線將這兩類資料分開,這條直線就相當於一個超平面,超平面一邊的資料點所對應的y全是-1 ,另一邊所對應的y全是1。

    這個超平面可以用分類函式表示,當f(x) 等於0的時候,x便是位於超平面上的點,而f(x)大於0的點對應 y=1 的資料點,f(x)小於0的點對應y=-1的點,如下圖所示:

    注:有的資料上定義特徵到結果的輸出函式與這裡定義的實質是一樣的。為什麼?因為無論是,還是,不影響最終優化結果。下文你將看到,當我們轉化到優化的時候,為了求解方便,會把yf(x)令為1,即yf(x)是y(w^x + b),還是y(w^x - b),對我們要優化的式子max1/||w||已無影響。

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

    換言之,在進行分類的時候,遇到一個新的資料點x,將x代入f(x) 中,如果f(x)小於0則將x的類別賦為-1,如果f(x)大於0則將x的類別賦為1。

    接下來的問題是,如何確定這個超平面呢?從直觀上而言,這個超平面應該是最適合分開兩類資料的直線。而判定“最適合”的標準就是這條直線離直線兩邊的資料的間隔最大。所以,得尋找有著最大間隔的超平面。

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

    在超平面w*x+b=0確定的情況下,|w*x+b|能夠表示點x到距離超平面的遠近,而通過觀察w*x+b的符號與類標記y的符號是否一致可判斷分類是否正確,所以,可以用(y*(w*x+b))的正負性來判定或表示分類的正確性。於此,我們便引出了函式間隔(functional margin)的概念。

    定義函式間隔(用表示)為:

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

     mini  (i=1,...n)

    但這樣定義的函式間隔有問題,即如果成比例的改變w和b(如將它們改成2w和2b),則函式間隔的值f(x)卻變成了原來的2倍(雖然此時超平面沒有改變),所以只有函式間隔還遠遠不夠。

    事實上,我們可以對法向量w加些約束條件,從而引出真正定義點到超平面的距離--幾何間隔(geometrical margin)的概念。

    假定對於一個點 x ,令其垂直投影到超平面上的對應點為 x0 ,w 是垂直於超平面的一個向量,為樣本x到超平面的距離,如下圖所示:

根據平面幾何知識,有

    其中||w||為w的二階範數(範數是一個類似於模的表示長度的概念),是單位向量(一個向量除以它的模稱之為單位向量)。

    又由於x0 是超平面上的點,滿足 f(x0)=0,代入超平面的方程,可得,即

    隨即讓此式的兩邊同時乘以,再根據,即可算出γ: 

  為了得到的絕對值,令乘上對應的類別 y,即可得出幾何間隔(用表示)的定義:

    從上述函式間隔和幾何間隔的定義可以看出:幾何間隔就是函式間隔除以||w||,而且函式間隔y*(wx+b) = y*f(x)實際上就是|f(x)|,只是人為定義的一個間隔度量,而幾何間隔|f(x)|/||w||才是直觀上的點到超平面的距離。

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

    對一個數據點進行分類,當超平面離資料點的“間隔”越大,分類的確信度(confidence)也越大。所以,為了使得分類的確信度儘量高,需要讓所選擇的超平面能夠最大化這個“間隔”值。這個間隔就是下圖中的Gap的一半。

    通過由前面的分析可知:函式間隔不適合用來最大化間隔值,因為在超平面固定以後,可以等比例地縮放w的長度和b的值,這樣可以使得的值任意大,亦即函式間隔可以在超平面保持不變的情況下被取得任意大。但幾何間隔因為除上了,使得在縮放w和b的時候幾何間隔的值是不會改變的,它只隨著超平面的變動而變動,因此,這是更加合適的一個間隔。換言之,這裡要找的最大間隔分類超平面中的“間隔”指的是幾何間隔。

   於是最大間隔分類器(maximum margin classifier的目標函式可以定義為:

    同時需滿足一些條件,根據間隔的定義,有

    其中,s.t.,即subject to的意思,它匯出的是約束條件。

    回顧下幾何間隔的定義,可知:如果令函式間隔等於1(之所以令等於1,是為了方便推導和優化,且這樣做對目標函式的優化沒有影響,至於為什麼,請見本文評論下第42樓回覆),則有 = 1 / ||w||且,從而上述目標函式轉化成了

    相當於在相應的約束條件下,最大化這個1/||w||值,而1/||w||便是幾何間隔。   

    如下圖所示,中間的實線便是尋找到的最優超平面(Optimal Hyper Plane),其到兩條虛線邊界的距離相等,這個距離便是幾何間隔,兩條虛線間隔邊界之間的距離等於2,而虛線間隔邊界上的點則是支援向量。由於這些支援向量剛好在虛線間隔邊界上,所以它們滿足(還記得我們把 functional margin 定為 1 了嗎?上節中:處於方便推導和優化的目的,我們可以令=1),而對於所有不是支援向量的點,則顯然有

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

第二層、深入SVM

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

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

    接著考慮之前得到的目標函式:

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

    因為現在的目標函式是二次的,約束條件是線性的,所以它是一個凸二次規劃問題。這個問題可以用現成的QP (Quadratic Programming) 優化包進行求解。一言以蔽之:在一定的約束條件下,目標最優,損失最小。

    此外,由於這個問題的特殊結構,還可以通過拉格朗日對偶性(Lagrange Duality)變換到對偶變數 (dual variable) 的優化問題,即通過求解與原問題等價的對偶問題(dual problem)得到原始問題的最優解,這就是線性可分條件下支援向量機的對偶演算法,這樣做的優點在於:一者對偶問題往往更容易求解;二者可以自然的引入核函式,進而推廣到非線性分類問題。

     那什麼是拉格朗日對偶性呢?簡單來講,通過給每一個約束條件加上一個拉格朗日乘子(Lagrange multiplier),定義拉格朗日函式(通過拉格朗日函式將約束條件融合到目標函式裡去,從而只用一個函式表示式便能清楚的表達出我們的問題):

    然後令

    容易驗證,當某個約束條件不滿足時,例如,那麼顯然有(只要令即可)。而當所有約束條件都滿足時,則最優值為,亦即最初要最小化的量。

    因此,在要求約束條件得到滿足的情況下最小化,實際上等價於直接最小化(當然,這裡也有約束條件,就是≥0,i=1,…,n)   ,因為如果約束條件沒有得到滿足,會等於無窮大,自然不會是我們所要求的最小值。

    具體寫出來,目標函式變成了:

    這裡用表示這個問題的最優值,且和最初的問題是等價的。如果直接求解,那麼一上來便得面對w和b兩個引數,而又是不等式約束,這個求解過程不好做。不妨把最小和最大的位置交換一下,變成:

    交換以後的新問題是原始問題的對偶問題,這個新問題的最優值用來表示。而且有,在滿足某些條件的情況下,這兩者相等,這個時候就可以通過求解對偶問題來間接地求解原始問題。

    換言之,之所以從minmax的原始問題,轉化為maxmin的對偶問題,一者因為的近似解,二者,轉化為對偶問題後,更容易求解。

    下面可以先求L 對w、b的極小,再求L 對的極大。

2.1.2、KKT條件

    上文中提到“在滿足某些條件的情況下,兩者等價”,這所謂的“滿足某些條件”就是要滿足KKT條件。

  勘誤:經讀者qq_28543029指出,這裡的條件不應該是KKT條件,要讓兩者等價需滿足strong duality (強對偶),而後有學者在強對偶下提出了KKT條件,且KKT條件的成立要滿足constraint qualifications,而constraint qualifications之一就是Slater條件。所謂Slater 條件,即指:凸優化問題,如果存在一個點x,使得所有等式約束都成立,並且所有不等式約束都嚴格成立(即取嚴格不等號,而非等號),則滿足Slater 條件。對於此處,Slater 條件成立,所以d*≤p*可以取等號。

    一般地,一個最優化數學模型能夠表示成下列標準形式:

    其中,f(x)是需要最小化的函式,h(x)是等式約束,g(x)是不等式約束,p和q分別為等式約束和不等式約束的數量。

    同時,得明白以下兩點:

  • 凸優化的概念:\mathcal{X} \subset \mathbb{R}^n 為一凸集, f:\mathcal{X}\to \mathbb{R} 為一凸函式。凸優化就是要找出一點 x^\ast \in \mathcal{X} ,使得每一 x \in \mathcal{X} 滿足 f(x^\ast)\le f(x) 。
  •  
  • KKT條件的意義:它是一個非線性規劃(Nonlinear Programming)問題能有最優化解法的必要和充分條件。

    而KKT條件就是指上面最優化數學模型的標準形式中的最小點 x* 必須滿足下面的條件:

    經過論證,我們這裡的問題是滿足 KKT 條件的(首先已經滿足Slater條件,再者f和gi也都是可微的,即L對w和b都可導),因此現在我們便轉化為求解第二個問題。

    也就是說,原始問題通過滿足KKT條件,已經轉化成了對偶問題。而求解這個對偶學習問題,分為3個步驟:首先要讓L(w,b,a) 關於 w 和 b 最小化,然後求對的極大,最後利用SMO演算法求解對偶問題中的拉格朗日乘子。

2.1.3、對偶問題求解的3個步驟

    (1)、首先固定要讓 L 關於 w 和 b 最小化,我們分別對w,b求偏導數,即令 ∂L/∂w 和 ∂L/∂b 等於零(對w求導結果的解釋請看本文評論下第45樓回覆):

    將以上結果代入之前的L: 

    得到:

    提醒:有讀者可能會問上述推導過程如何而來?說實話,其具體推導過程是比較複雜的,如下圖所示:

      最後,得到:

    如 jerrylead所說:“倒數第4步”推導到“倒數第3步”使用了線性代數的轉置運算,由於ai和yi都是實數,因此轉置後與自身一樣。“倒數第3步”推導到“倒數第2步”使用了(a+b+c+…)(a+b+c+…)=aa+ab+ac+ba+bb+bc+…的乘法運演算法則。最後一步是上一步的順序調整。

    從上面的最後一個式子,我們可以看出,此時的拉格朗日函式只包含了一個變數,那就是(求出了便能求出w,和b,由此可見,上文第1.2節提出來的核心問題:分類函式也就可以輕而易舉的求出來了)。

    (2)、求對的極大,即是關於對偶問題的最優化問題。經過上面第一個步驟的求w和b,得到的拉格朗日函式式子已經沒有了變數w,b,只有。從上面的式子得到:

    這樣,求出了,根據,即可求出w,然後通過,即可求出b,最終得出分離超平面和分類決策函式。

    (3)在求得L(w, b, a) 關於 w 和 b 最小化,以及對的極大之後,最後一步則可以利用SMO演算法求解對偶問題中的拉格朗日乘子

       上述式子要解決的是在引數上求最大值W的問題,至於都是已知數要了解這個SMO演算法是如何推導的,請跳到下文第3.5節、SMO演算法。

到目前為止,我們的 SVM 還比較弱,只能處理線性的情況,下面我們將引入核函式,進而推廣到非線性分類問題。

2.1.4、線性不可分的情況

    OK,為過渡到下節2.2節所介紹的核函式,讓我們再來看看上述推導過程中得到的一些有趣的形式。首先就是關於我們的 hyper plane ,對於一個數據點 x 進行分類,實際上是通過把 x 帶入到算出結果然後根據其正負號來進行類別劃分的。而前面的推導中我們得到 

    因此分類函式為:

    這裡的形式的有趣之處在於,對於新點 x的預測,只需要計算它與訓練資料點的內積即可(表示向量內積),這一點至關重要,是之後使用 Kernel 進行非線性推廣的基本前提。此外,所謂 Supporting Vector 也在這裡顯示出來——事實上,所有非Supporting Vector 所對應的係數都是等於零的,因此對於新點的內積計算實際上只要針對少量的“支援向量”而不是所有的訓練資料即可。

    為什麼非支援向量對應的等於零呢?直觀上來理解的話,就是這些“後方”的點——正如我們之前分析過的一樣,對超平面是沒有影響的,由於分類完全有超平面決定,所以這些無關的點並不會參與分類問題的計算,因而也就不會產生任何影響了。

    回憶一下我們2.1.1節中通過 Lagrange multiplier得到的目標函式:

     注意到如果 xi 是支援向量的話,上式中紅顏色的部分是等於 0 的(因為支援向量的 functional margin 等於 1 ),而對於非支援向量來說,functional margin 會大於 1 ,因此紅顏色部分是大於零的,而又是非負的,為了滿足最大化,必須等於 0 。這也就是這些非Supporting Vector 的點的侷限性。 

    至此,我們便得到了一個maximum margin hyper plane classifier,這就是所謂的支援向量機(Support Vector Machine)。當然,到目前為止,我們的 SVM 還比較弱,只能處理線性的情況,不過,在得到了對偶dual 形式之後,通過 Kernel 推廣到非線性的情況就變成了一件非常容易的事情了(相信,你還記得本節開頭所說的:“通過求解對偶問題得到最優解,這就是線性可分條件下支援向量機的對偶演算法,這樣做的優點在於:一者對偶問題往往更容易求解;二者可以自然的引入核函式,進而推廣到非線性分類問題”)。

2.2、核函式Kernel

2.2.1、特徵空間的隱式對映:核函式

    事實上,大部分時候資料並不是線性可分的,這個時候滿足這樣條件的超平面就根本不存在。在上文中,我們已經瞭解到了SVM處理線性可分的情況,那對於非線性的資料SVM咋處理呢?對於非線性的情況,SVM 的處理方法是選擇一個核函式 κ(⋅,⋅) ,通過將資料對映到高維空間,來解決在原始空間中線性不可分的問題。

    具體來說,線上性不可分的情況下,支援向量機首先在低維空間中完成計算,然後通過核函式將輸入空間對映到高維特徵空間,最終在高維特徵空間中構造出最優分離超平面,從而把平面上本身不好分的非線性資料分開。如圖所示,一堆資料在二維空間無法劃分,從而對映到三維空間裡劃分:

    而在我們遇到核函式之前,如果用原始的方法,那麼在用線性學習器學習一個非線性關係,需要選擇一個非線性特徵集,並且將資料寫成新的表達形式,這等價於應用一個固定的非線性對映,將資料對映到特徵空間,在特徵空間中使用線性學習器,因此,考慮的假設集是這種型別的函式:

    這裡ϕ:X->F是從輸入空間到某個特徵空間的對映,這意味著建立非線性學習器分為兩步:

  1. 首先使用一個非線性對映將資料變換到一個特徵空間F,
  2.  
  3. 然後在特徵空間使用線性學習器分類。

    而由於對偶形式就是線性學習器的一個重要性質,這意味著假設可以表達為訓練點的線性組合,因此決策規則可以用測試點和訓練點的內積來表示:

    如果有一種方式可以在特徵空間中直接計算內積〈φ(xi · φ(x),就像在原始輸入點的函式中一樣,就有可能將兩個步驟融合到一起建立一個非線性的學習器,這樣直接計演算法的方法稱為核函式方法:

    核是一個函式K,對所有x,z(-X,滿足,這裡φ是從X到內積特徵空間F的對映。

2.2.2、核函式:如何處理非線性資料

    來看個核函式的例子。如下圖所示的兩類資料,分別分佈為兩個圓圈的形狀,這樣的資料本身就是線性不可分的,此時咱們該如何把這兩類資料分開呢(下文將會有一個相應的三維空間圖)?

 

    事實上,上圖所述的這個資料集,是用兩個半徑不同的圓圈加上了少量的噪音生成得到的,所以,一個理想的分界應該是一個“圓圈”而不是一條線(超平面)。如果用來表示這個二維平面的兩個座標的話,我們知道一條二次曲線(圓圈是二次曲線的一種特殊情況)的方程可以寫作這樣的形式:

    注意上面的形式,如果我們構造另外一個五維的空間,其中五個座標的值分別為, , , ,那麼顯然,上面的方程在新的座標系下可以寫作:

    關於新的座標,這正是一個 hyper plane 的方程!也就是說,如果我們做一個對映,將 按照上面的規則對映為,那麼在新的空間中原來的資料將變成線性可分的,從而使用之前我們推導的線性分類演算法就可以進行處理了。這正是 Kernel 方法處理非線性問題的基本思想。

    再進一步描述 Kernel 的細節之前,不妨再來看看上述例子在對映過後的直觀形態。當然,你我可能無法把 5 維空間畫出來,不過由於我這裡生成資料的時候用了特殊的情形,所以這裡的超平面實際的方程是這個樣子的(圓心在軸上的一個正圓):

    因此我只需要把它對映到這樣一個三維空間中即可,下圖即是對映之後的結果,將座標軸經過適當的旋轉,就可以很明顯地看出,資料是可以通過一個平面來分開的(pluskid:下面的gif 動畫,先用 Matlab 畫出一張張圖片,再用 Imagemagick 拼貼成):

    核函式相當於把原來的分類函式:

    對映成:

    而其中的可以通過求解如下 dual 問題而得到的:

    這樣一來問題就解決了嗎?似乎是的:拿到非線性資料,就找一個對映,然後一股腦把原來的資料對映到新空間中,再做線性 SVM 即可。不過事實上好像並沒有這麼簡單。

    細想一下,剛才的方法是不是有問題?

  • 在最初的例子裡,我們對一個二維空間做對映,選擇的新空間是原始空間的所有一階和二階的組合,得到了五個維度;
  •  
  • 如果原始空間是三維(一階、二階和三階的組合),那麼我們會得到:3(一次)+3(二次交叉)+3(平方)+3(立方)+1(x1*x2*x3)+2*3(交叉,一個一次一個二次,類似x1*x2^2) = 19維的新空間,這個數目是呈指數級爆炸性增長的,從而勢必這給的計算帶來非常大的困難,而且如果遇到無窮維的情況,就根本無從計算了。

    這個時候,可能就需要 Kernel 出馬了。

    不妨還是從最開始的簡單例子出發,設兩個向量,而即是到前面說的五維空間的對映,因此對映過後的內積為:

        (公式說明:上面的這兩個推導過程中,所說的前面的五維空間的對映,這裡說的前面便是文中2.2.1節的所述的對映方式,回顧下之前的對映規則,再看那第一個推導,其實就是計算x1,x2各自的內積,然後相乘相加即可,第二個推導則是直接平方,去掉括號,也很容易推出來)

    另外,我們又注意到:

     二者有很多相似的地方,實際上,我們只要把某幾個維度線性縮放一下,然後再加上一個常數維度,具體來說,上面這個式子的計算結果實際上和對映

     之後的內積的結果是相等的,那麼區別在於什麼地方呢?

  1. 一個是對映到高維空間中,然後再根據內積的公式進行計算;
  2.  
  3. 而另一個則直接在原來的低維空間中進行計算,而不需要顯式地寫出對映後的結果

    (公式說明:上面之中,最後的兩個式子,第一個算式,是帶內積的完全平方式,可以拆開,然後,通過湊一個得到,第二個算式,也是根據第一個算式湊出來的)

    回憶剛才提到的對映的維度爆炸,在前一種方法已經無法計算的情況下,後一種方法卻依舊能從容處理,甚至是無窮維度的情況也沒有問題。

    我們把這裡的計算兩個向量在隱式對映過後的空間中的內積的函式叫做核函式 (Kernel Function) ,例如,在剛才的例子中,我們的核函式為:

    核函式能簡化對映空間中的內積運算——剛好“碰巧”的是,在我們的 SVM 裡需要計算的地方資料向量總是以內積的形式出現的。對比剛才我們上面寫出來的式子,現在我們的分類函式為:

    其中 由如下 dual 問題計算而得:

    這樣一來計算的問題就算解決了,避開了直接在高維空間中進行計算,而結果卻是等價的!當然,因為我們這裡的例子非常簡單,所以我可以手工構造出對應於的核函數出來,如果對於任意一個對映,想要構造出對應的核函式就很困難了。

2.2.3、幾個核函式

    通常人們會從一些常用的核函式中選擇(根據問題和資料的不同,選擇不同的引數,實際上就是得到了不同的核函式),例如:

  • 多項式核,顯然剛才我們舉的例子是這裡多項式核的一個特例(R = 1,d = 2)。雖然比較麻煩,而且沒有必要,不過這個核所對應的對映實際上是可以寫出來的,該空間的維度是,其中 m 是原始空間的維度。
  •  
  • 高斯核,這個核就是最開始提到過的會將原始空間對映為無窮維空間的那個傢伙。不過,如果選得很大的話,高次特徵上的權重實際上衰減得非常快,所以實際上(數值上近似一下)相當於一個低維的子空間;反過來,如果選得很小,則可以將任意的資料對映為線性可分——當然,這並不一定是好事,因為隨之而來的可能是非常嚴重的過擬合問題。不過,總的來說,通過調控引數,高斯核實際上具有相當高的靈活性,也是使用最廣泛的核函式之一。下圖所示的例子便是把低維線性不可分的資料通過高斯核函式對映到了高維空間:
  •  
  • 線性核,這實際上就是原始空間中的內積。這個核存在的主要目的是使得“對映後空間中的問題”和“對映前空間中的問題”兩者在形式上統一起來了(意思是說,咱們有的時候,寫程式碼,或寫公式的時候,只要寫個模板或通用表示式,然後再代入不同的核,便可以了,於此,便在形式上統一了起來,不用再分別寫一個線性的,和一個非線性的)。

2.2.4、核函式的本質

        上面說了這麼一大堆,讀者可能還是沒明白核函式到底是個什麼東西?我再簡要概括下,即以下三點:

  1. 實際中,我們會經常遇到線性不可分的樣例,此時,我們的常用做法是把樣例特徵對映到高維空間中去(如上文2.2節最開始的那幅圖所示,對映到高維空間後,相關特徵便被分開了,也就達到了分類的目的);
  2.  
  3. 但進一步,如果凡是遇到線性不可分的樣例,一律對映到高維空間,那麼這個維度大小是會高到可怕的(如上文中19維乃至無窮維的例子)。那咋辦呢?
  4.  
  5. 此時,核函式就隆重登場了,核函式的價值在於它雖然也是將特徵進行從低維到高維的轉換,但核函式絕就絕在它事先在低維上進行計算,而將實質上的分類效果表現在了高維上,也就如上文所說的避免了直接在高維空間中的複雜計算。

    最後引用這裡的一個例子舉例說明下核函式解決非線性問題的直觀效果。

    假設現在你是一個農場主,圈養了一批羊群,但為預防狼群襲擊羊群,你需要搭建一個籬笆來把羊群圍起來。但是籬笆應該建在哪裡呢?你很可能需要依據牛群和狼群的位置建立一個“分類器”,比較下圖這幾種不同的分類器,我們可以看到SVM完成了一個很完美的解決方案。

    這個例子從側面簡單說明了SVM使用非線性分類器的優勢,而邏輯模式以及決策樹模式都是使用了直線方法。

    OK,不再做過多介紹了,對核函式有進一步興趣的,還可以看看此文

2.3、使用鬆弛變數處理 outliers 方法

    在本文第一節最開始討論支援向量機的時候,我們就假定,資料是線性可分的,亦即我們可以找到一個可行的超平面將資料完全分開。後來為了處理非線性資料,在上文2.2節使用 Kernel 方法對原來的線性 SVM 進行了推廣,使得非線性的的情況也能處理。雖然通過對映將原始資料對映到高維空間之後,能夠線性分隔的概率大大增加,但是對於某些情況還是很難處理。

    例如可能並不是因為資料本身是非線性結構的,而只是因為資料有噪音。對於這種偏離正常位置很遠的資料點,我們稱之為 outlier ,在我們原來的 SVM 模型裡,outlier 的存在有可能造成很大的影響,因為超平面本身就是隻有少數幾個 support vector 組成的,如果這些 support vector 裡又存在 outlier 的話,其影響就很大了。例如下圖: