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

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


前言
第一層、瞭解SVM
  1.0、什麼是支援向量機SVM
  1.1、線性分類
  1.2、線性分類的一個例子
  1.3、函式間隔Functional margin與幾何間隔Geometrical margin
    1.3.1、函式間隔Functional margin
    1.3.2、點到超平面的距離定義:幾何間隔Geometrical margin
  1.4、最大間隔分類器Maximum Margin Classifier的定義
  1.5、到底什麼是Support Vector
第二層、深入SVM
  2.1、從線性可分到線性不可分
  2.2、核函式Kernel
    2.2.1、如何處理非線性資料
    2.2.2、特徵空間的隱式對映:核函式
  2.3、使用鬆弛變數處理 outliers 方法
  2.4、小結
第三層、證明SVM
  3.1、線性學習器
    3.1.1、感知機演算法
    3.1.2、鬆弛變數
  3.2、最小二乘法
  3.3、核函式特徵空間
  3.4、SMO演算法
  3.5、SVM的應用
    3.5.1、文字分類
參考文獻及推薦閱讀
預告
前言

    動筆寫這個支援向量機(support vector machine)是費了不少勁和困難的,從5月22日凌晨兩點在微博上說我要寫了,到此刻真正動筆要寫此文,中間竟然隔了近半個月(而後你會發現,我寫完此文得花一個半月,修改完善又得再花一個月,故前後加起來至8月底,寫這個SVM便要花足足近3個月)。原因很簡單,一者這個東西本身就並不好懂,要深入學習和研究下去需花費不少時間和精力,二者這個東西也不好講清楚,儘管網上已經有朋友已經寫得不錯了(見文末參考連結),但在描述數學公式的時候還是顯得不夠。得益於同學白石的數學證明,我還是想嘗試寫一下,希望本文在兼顧通俗易懂的基礎上,真真正正能足以成為一篇完整概括和介紹支援向量機的導論性的文章。

    本文作為Top 10 Algorithms in Data Mining系列第二篇文章,將主要結合支援向量機導論、資料探勘導論及網友Free Mind的支援向量機系列而寫(於此,還是一篇學習筆記,只是加入了自己的理解,有任何不妥之處,還望海涵),巨集觀上整體認識支援向量機的概念和用處,微觀上深究部分定理的來龍去脈,證明及原理細節,力求深入淺出 & 通俗易懂。

    在本文中,你將看到,理解SVM分三層境界,


第一層、瞭解SVM(你只需要對SVM有個大致的瞭解,知道它是個什麼東西便已足夠);
第二層、深入SVM(你將跟我一起深入SVM的內部原理,通宵其各處脈絡,以為將來運用它時遊刃有餘);
第三層、證明SVM(當你瞭解了所有的原理之後,你會有大筆一揮,嘗試證明它的衝動);

    以此逐層深入,從而照顧到水平深淺度不同的讀者,在保證淺顯直白的基礎上儘可能深入,還讀者一個較為透徹清晰的SVM。 

    同時,閱讀本文之前,請讀者注意以下兩點:


若讀者用IE6瀏覽器閱讀本文,將有大部分公式無法正常顯示(顯示一半或者完全無法顯示),故若想正常的閱讀本文請儘量使用chrome等瀏覽器,謝謝大家。
本文中出現了諸多公式,若想真正理解本文之內容,我希望讀者,能拿張紙和筆出來,把本文所有定理.公式都親自推導一遍或者直接列印下來,在文稿上演算(讀本blog的最好辦法便是直接把某一篇文章列印下來,隨時隨地思考.演算.討論)。

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


第一層、瞭解SVM
1.0、什麼是支援向量機SVM

    然在進入第一層之前,你只需瞭解什麼是支援向量機SVM就夠了,而要明白什麼是SVM,便得從分類說起。

    分類作為資料探勘領域中一項非常重要的任務,目前在商業上應用最多(比如分析型CRM裡面的客戶分類模型,客戶流失模型,客戶盈利等等,其本質上都屬於分類問題)。而分類的目的則是學會一個分類函式或分類模型(或者叫做分類器),該模型能吧資料庫中的資料項對映到給定類別中的某一個,從而可以用於預測未知類別。

    其實,若叫分類,可能會有人產生誤解,以為凡是分類就是把一些東西或樣例按照類別給區分開來,實際上,分類方法是一個機器學習的方法,分類也成為模式識別,或者在概率統計中稱為判別分析問題。

    你甚至可以想當然的認為,分類就是恰如一個商場進了一批新的貨物,你現在要根據這些貨物的特徵分門別類的擺放在相關的架子上,這一過程便可以理解為分類,只是它由訓練有素的計算機程式來完成。
    說實話,上面這麼介紹分類可能你不一定內心十分清楚。我來舉個例子吧,比如心臟病的確診中,如果我要完全確診某人得了心臟病,那麼我必須要進行一些高階的手段,或者藉助一些昂貴的機器,那麼若我們沒有那些高科技醫療機器怎麼辦?還怎麼判斷某人是否得了心臟病呢?

    當然了,古代中醫是通過望、聞、問、切“四診”,但除了這些,我們在現代醫學裡還是可以利用一些比較容易獲得的臨床指標進行推斷某人是否得了心臟病。如作為一個醫生,他可以根據他以往診斷的病例對很多個病人(假設是500個)進行徹底的臨床檢測之後,已經能夠完全確定了哪些病人具有心臟病,哪些沒有。因為,在這個診斷的過程中,醫生理所當然的記錄了他們的年齡,膽固醇等10多項病人的相關指標。那麼,以後,醫生可以根據這些臨床資料,對後來新來的病人通過檢測那10多項年齡、膽固醇等指標,以此就能推斷或者判定病人是否有心臟病,雖說不能達到100%的標準,但也能達到80、90%的正確率,而這一根據以往臨場病例指標分析來推斷新來的病例的技術,即成為分類classification技術。


    OK,既然講到了病例診斷這個例子,接下來咱們就以這個例子來簡單分析下SVM。
假定是否患有心臟病與病人的年齡和膽固醇水平密切相關,下表對應10個病人的臨床資料(年齡用[x1]表示,膽固醇水平用[x2]表示):

    這樣,問題就變成了一個在二維空間上的分類問題,可以在平面直角座標系中描述如下:根據病人的兩項指標和有無心臟病,把每個病人用一個樣本點來表示,有心臟病者用“+”形點表示,無心臟病者用圓形點,如下圖所示:



    如此我們很明顯的看到,是可以在平面上用一條直線把圓點和“+”分開來的。當然,事實上,還有很多線性不可分的情況,下文將會具體描述。

    So,本文將要介紹的支援向量機SVM演算法便是一種分類方法。


所謂支援向量機,顧名思義,分為兩個部分了解,一什麼是支援向量(簡單來說,就是支援 or 支撐平面上把兩類類別劃分開來的超平面的向量點,下文將具體解釋),二這裡的“機”是什麼意思。我先來回答第二點:這裡的“機(machine,機器)”便是一個演算法。在機器學習領域,常把一些演算法看做是一個機器,如分類機(當然,也叫做分類器),而支援向量機本身便是一種監督式學習的方法(什麼是監督學習與非監督學習,請參見第一篇),它廣泛的應用於統計分類以及迴歸分析中。

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

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


1.1、線性分類

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

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


wTx+b=0

    不過,看過支援向量機導論或統計學習方法一書的讀者都知道,我們所熟知的感知機即是一種線性分類模型,如下圖所示(來源:統計學習方法第2章):




1.2、線性分類的一個例子

    來理論可能讀者看不懂,咱們來直接舉一個例子吧,且舉最簡單的例子,一個二維平面(一個超平面,在二維空間中的例子就是一條直線),如下圖所示,平面上有兩種不同的點,分別用兩種不同的顏色表示,一種為紅顏色的點,另一種則為藍顏色的點,紅顏色的線表示一個可行的超平面。



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

    接著,我們可以令分類函式(下文將一直用藍色表示分類函式)

 f(x)=wTx+b ,

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

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

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

       γ?=y(wTx+b)=yf(x)

    接著,我們定義超平面(w,b)關於訓練資料集T的函式間隔為超平面(w,b)關於T中所有樣本點(xi,yi)的函式間隔最小值,即:


γ?=minγ?i    (i=1,...n)


    然與此同時,問題就出來了。上述定義的函式間隔雖然可以表示分類預測的正確性和確信度,但在選擇分類超平面時,只有函式間隔還遠遠不夠,因為如果成比例的改變w和b,如將他們改變為2w和2b,雖然此時超平面沒有改變,但函式間隔的值f(x)卻變成了原來的改變(代進去一眼便看出來了)。其實,我們可以對法向量w加些約束條件,使其表面上看起來規範化,如此,我們很快又將引出真正定義點到超平面的距離--幾何間隔geometrical margin的概念。


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




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


x=x0+γw∥w∥

    又由於 x0 是超平面上的點,滿足 f(x0)=0 ,代入超平面的方程即可算出(別忘了,上面?γ的定義,?γ=y(wTx+b)=yf(x)): γ


γ=wTx+b∥w∥=f(x)∥w∥

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

    不過,這裡的 γ 是帶符號的,我們需要的只是它的絕對值,因此類似地,也乘上對應的類別 y即可,因此實際上我們定義 幾何間隔geometrical margin 為:


γ?=yγ=γ?∥w∥

 
(代人相關式子可以得出: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||麼?OK,下圖中xi,和xj分別到超平面的距離:



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

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

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

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

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

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


maxγ?? ??

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





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



    通過求解這個問題,我們就可以找到一個 margin 最大的 classifier ,如下圖所示,中間的紅色線條是 Optimal Hyper Plane ,另外兩條線到紅線的距離都是等於 

γ? 的( γ? 便是上文所定義的geometrical margin,當令 γ?=1時, γ? 便為1/||w||,而我們上面得到的目標函式便是在相應的約束條件下,要最大化這個1/||w||值):



    通過最大化 margin ,我們使得該分類器對資料進行分類時具有了最大的 confidence 。但,這個最大分類間隔器到底是用來幹嘛的呢?很簡單,SVM 通過使用最大分類間隙Maximum Margin Classifier 來設計決策最優分類超平面,而為何是最大間隔,卻不是最小間隔呢?因為最大間隔能獲得最大穩定性與區分的確信度,從而得到良好的推廣能力(超平面之間的距離越大,分離器的推廣能力越好,也就是預測精度越高,不過對於訓練資料的誤差不一定是最小的.2012.08.21updated)。

    So,對於什麼是Support Vector Machine ,我們可以先這樣理解,如上圖所示,我們可以看到 hyper plane 兩邊的那個 gap 分別對應的兩條平行的線(在高維空間中也應該是兩個 hyper plane)上有一些點,顯然兩個超平面hyper plane 上都會有點存在,否則我們就可以進一步擴大 gap ,也就是增大 γ? 的值了。這些點,就叫做 support vector。下文1.5節將更為具體描述。


1.5、到底什麼是Support Vector

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




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

    很顯然,由於這些 supporting vector 剛好在邊界上,所以它們是滿足 y(wTx+b)=1 (還記得我們把 functional margin 定為 1 了嗎?上節中:“處於方便推導和優化的目的,我們可以令 γ?=1”),而對於所有不是支援向量的點,也就是在“陣地後方”的點,則顯然有 y(wTx+b)>1 。當然,通常除了 K-Nearest Neighbor 之類的 Memory-based Learning 演算法,通常演算法也都不會直接把所有的點記憶下來,並全部用來做後續 inference 中的計算。不過,如果演算法使用了 Kernel 方法進行非線性化推廣的話,就會遇到這個問題了。Kernel 方法在下文第二部分2.2節中介紹)。

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


第二層、深入SVM
2.1、從線性可分到線性不可分

    當然,除了在上文中所介紹的從幾何直觀上之外,支援向量的概念也可以從其優化過程的推導中得到。雖然上文1.4節給出了目標函式,卻沒有講怎麼來求解。現在就讓我們來處理這個問題。回憶一下之前得到的目標函式(subject to匯出的則是約束條件):





    這個問題等價於(w由分母變成分子,從而也有原來的max問題變為min問題,很明顯,兩者問題等價):






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

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

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



   然後我們令



    容易驗證,當某個約束條件不滿足時,例如 yi(wTxi+b)<1,那麼我們顯然有 θ(w)=∞(只要令 αi=∞ 即可)。而當所有約束條件都滿足時,則有 θ(w)=12∥w∥2 ,    亦即我們最初要最小化的量。因此,在要求約束條件得到滿足的情況下最小化 12∥w∥2    實際上等價於直接最小化 θ(w)     (當然,這裡也有約束條件,就是 αi≥0,i=1,…,n)   ,因為如果約束條件沒有得到滿足,θ(w)     會等於無窮大,自然不會是我們所要求的最小值。具體寫出來,我們現在的目標函式變成了:





    這裡用 p? 表示這個問題的最優值,這個問題和我們最初的問題是等價的。不過,現在我們來把最小和最大的位置交換一下(稍後,你將看到,當下面式子滿足了一定的條件之後,這個式子d 便是上式P 的對偶形式表示):





    當然,交換以後的問題不再等價於原問題,這個新問題的最優值用 d? 來表示。並,我們有 d?≤p? ,這在直觀上也不難理解,最大值中最小的一個總也比最小值中最大的一個要大吧!  總之,第二個問題的最優值 d? 在這裡提供了一個第一個問題的最優值 p? 的一個下界,在滿足某些條件的情況下,這兩者相等,這個時候我們就可以通過求解第二個問題來間接地求解第一個問題。

    上段說“在滿足某些條件的情況下”,這所謂的“滿足某些條件”就是要滿足KKT條件。而什麼是KKT條件呢?據網上給的資料介紹是(更多見維基百科:KKT 條件),一般地,一個最優化數學模型能夠表示成下列標準形式:



    所謂 Karush-Kuhn-Tucker 最優化條件,就是指上式的最小點 x* 必須滿足下面的條件:



    我這裡先,直接給結論,後續會證明:我們這裡的問題是滿足 KKT 條件的,因此現在我們便轉化為求解第二個問題。也就是說,現在,咱們的原問題通過滿足一定的條件,已經轉化成了對偶問題。而求解這個對偶學習問題,分為兩個步驟,首先要讓L(w,b,a) 關於 w 和 b 最小化,然後求對α的極大。

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


?L?w=0?L?b=0?w=∑i=1nαiyixi?∑i=1nαiyi=0

    帶回上述的 L 得到:




L(

    使用拉格朗日定理解凸最優化問題可以使用一個對偶變量表示,用對偶問題表示之後,通常比原問題更容易處理,因為直接處理不等式約束是困難的,而對偶問題通過引入拉格朗日乘子(又稱為對偶變數)來解。

    (2)、求對α的極大,即是關於對偶變數dual variable α(下文將一直用粗體+下劃線表示)的優化問題(沒有了變數w,b,只有a,反過來,求得的a將能匯出w,b的解,最終得出分離超平面和分類決策函式):



    如前面所說,這個問題有更加高效的優化演算法,不過具體方法在這裡先不介紹,讓我們先來看看推導過程中得到的一些有趣的形式。首先就是關於我們的 hyper plane ,對於一個數據點 x 進行分類,實際上是通過把 x 帶入到 f(x)=wTx+b      算出結果然後根據其正負號來進行類別劃分的。而前面的推導中我們得到 



      w=∑ni=1αiyixi
 ,

    因此分類函式為:



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

    為什麼非支援向量對應的 α 等於零呢?直觀上來理解的話,就是這些“後方”的點——正如我們之前分析過的一樣,對超平面是沒有影響的,由於分類完全有超平面決定,所以這些無關的點並不會參與分類問題的計算,因而也就不會產生任何影響了。這個結論也可由剛才的推導中得出,回憶一下我們剛才通過 Lagrange multiplier 得到的目標函式:



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

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


2.2、核函式Kernel

    咱們首先給出核函式的來頭:


在上文中,我們已經瞭解到了SVM處理線性可分的情況,而對於非線性的情況,SVM 的處理方法是選擇一個核函式 κ(?,?) ,通過將資料對映到高維空間,來解決在原始空間中線性不可分的問題。由於核函式的優良品質,這樣的非線性擴充套件在計算量上並沒有比原來複雜多少,這一點是非常難得的。當然,這要歸功於核方法——除了 SVM 之外,任何將計算表示為資料點的內積的方法,都可以使用核方法進行非線性擴充套件。

    也就是說,Minsky和Papert早就在20世紀60年代就已經明確指出線性學習器計算能力有限。為什麼呢?因為總體上來講,現實世界複雜的應用需要有比線性函式更富有表達能力的假設空間,也就是說,目標概念通常不能由給定屬性的簡單線性函式組合產生,而是應該一般地尋找待研究資料的更為一般化的抽象特徵。

    而下文我們將具體介紹的核函式則提供了此種問題的解決途徑,從下文你將看到,核函式通過把資料對映到高維空間來增加第一節所述的線性學習器的能力,使得線性學習器對偶空間的表達方式讓分類操作更具靈活性和可操作性。我們知道,訓練樣例一般是不會獨立出現的,它們總是以成對樣例的內積形式出現,而用對偶形式表示學習器的優勢在為在該表示中可調引數的個數不依賴輸入屬性的個數,通過使用恰當的核函式來替代內積,可以隱式得將非線性的訓練資料對映到高維空間,而不增加可調引數的個數(當然,前提是核函式能夠計算對應著兩個輸入特徵向量的內積)。


    1、簡而言之:線上性不可分的情況下,支援向量機通過某種事先選擇的非線性對映(核函式)將輸入變數對映到一個高維特徵空間,在這個空間中構造最優分類超平面。我們使用SVM進行資料集分類工作的過程首先是同預先選定的一些非線性對映將輸入空間對映到高維特徵空間(下圖很清晰的表達了通過對映到高維特徵空間,而把平面上本身不好分的非線性資料分了開來):

    使得在高維屬性空間中有可能最訓練資料實現超平面的分割,避免了在原輸入空間中進行非線性曲面分割計算。SVM資料集形成的分類函式具有這樣的性質:它是一組以支援向量為引數的非線性函式的線性組合,因此分類函式的表示式僅和支援向量的數量有關,而獨立於空間的維度,在處理高維輸入空間的分類時,這種方法尤其有效,其工作原理如下圖所示:

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

    這裡?:X->F是從輸入空間到某個特徵空間的對映,這意味著建立非線性學習器分為兩步:
首先使用一個非線性對映將資料變換到一個特徵空間F,
然後在特徵空間使用線性學習器分類。
    在上文我提到過對偶形式,而這個對偶形式就是線性學習器的一個重要性質,這意味著假設可以表達為訓練點的線性組合,因此決策規則可以用測試點和訓練點的內積來表示:

    如果有一種方式可以在特徵空間中直接計算內積〈φ(xi · φ(x)〉,就像在原始輸入點的函式中一樣,就有可能將兩個步驟融合到一起建立一個非線性的學習器,這樣直接計演算法的方法稱為核函式方法,於是,核函式便橫空出世了。
    這裡我直接給出一個定義:核是一個函式K,對所有x,z(-X,滿足,這裡φ是從X到內積特徵空間F的對映。
    3、總而言之,舉個簡單直接點的例子,則是如果不是用核技術,就會先計算線性對映phy(x1)和phy(x2),然後計算這兩個特徵的內積,使用了核技術之後,先把phy(x1)和phy(x2)的通用表示式子:< phy(x1),phy(x2) >=k( <x1,x2> )計算出來,注意到這裡的< , >表示內積,k( , )就是對應的核函式,這個表達往往非常簡單,所以計算非常方便。
    ....
    OK,接下來,咱們就進一步從外到裡,來探探這個核函式的真面目。
2.2.1、如何處理非線性資料

    在2.1節中我們介紹了線性情況下的支援向量機,它通過尋找一個線性的超平面來達到對資料進行分類的目的。不過,由於是線性方法,所以對非線性的資料就沒有辦法處理了。舉個例子來說,則是如下圖所示的兩類資料,分別分佈為兩個圓圈的形狀,這樣的資料本身就是線性不可分的,你準備如何把這兩類資料分開呢(下文將會有一個相應的三維空間圖)?

 

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


a1X1+a2X21+a3X2+a4X22+a5X1X2+a6=0

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


∑i=15aiZi+a6=0

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


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

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


a1X21+a2(X2?c)2+a3=0

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



    現在讓我們再回到 SVM 的情形,假設原始的資料時非線性的,我們通過一個對映 ?(?) 將其對映到一個高維空間中,資料變得線性可分了,這個時候,我們就可以使用原來的推導來進行計算,只是所有的推導現在是在新的空間,而不是原始空間中進行。當然,推導過程也並不是可以簡單地直接類比的,例如,原本我們要求超平面的法向量 w ,但是如果對映之後得到的新空間的維度是無窮維的(確實會出現這樣的情況,比如後面會提到的 高斯核Gaussian Kernel ),要表示一個無窮維的向量描述起來就比較麻煩。於是我們不妨先忽略過這些細節,直接從最終的結論來分析,回憶一下,我們上一次2.1節中得到的最終的分類函式是這樣的:



    現在則是在對映過後的空間,即:





    而其中的 α 也是通過求解如下 dual 問題而得到的:





    這樣一來問題就解決了嗎?似乎是的:拿到非線性資料,就找一個對映 ,然後一股腦把原來的資料對映到新空間中,再做線性 SVM 即可。不過事實上沒有這麼簡單!其實剛才的方法稍想一下就會發現有問題:在最初的例子裡,我們對一個二維空間做對映,選擇的新空間是原始空間的所有一階和二階的組合,得到了五個維度;如果原始空間是三維,那麼我們會得到 19 維的新空間,這個數目是呈爆炸性增長的,這給 的計算帶來了非常大的困難,而且如果遇到無窮維的情況,就根本無從計算了。所以就需要 Kernel 出馬了。

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


相關推薦

轉載支援向量通俗導論理解SVM境界

前言第一層、瞭解SVM  1.0、什麼是支援向量機SVM  1.1、線性分類  1.2、線性分類的一個例子  1.3、函式間隔Functional margin與幾何間隔Geometrical margin    1.3.1、函式間隔Functional margin    1.3.2、點到超平面的距離定

支援向量通俗導論理解SVM境界

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

機器學習之旅:支援向量通俗導論理解SVM境界

 支援向量機通俗導論(理解SVM的三層境界)作者:July、pluskid ;致謝:白石、JerryLead出處:結構之法演算法之道blog。前言    動筆寫這個支援向量機(support vector machine)是費了不少勁和困難的,原因很簡單,一者這個東西本身就並

支援向量通俗導論理解SVM境界(2)

第二層、深入SVM 2.1、從線性可分到線性不可分 2.1.1、從原始問題到對偶問題的求解 接著考慮之前得到的目標函式:      由於求的最大值相當於求的最小值,所以上述目標函式等價於(w由分母變成分子,從而也有原來的max問題變為min問題,很明顯,兩者問

機器學習--支援向量通俗導論理解SVM境界

            支援向量機通俗導論(理解SVM的三層境界) 作者:July 。致謝:pluskid、白石、JerryLead。 說明:本文最初寫於2012年6月,而後不斷反反覆覆修改&優化,修改次數達上百次,最後修改於2016年11月。 前言

影象識別支援向量通俗導論

原文:http://www.36dsj.com/archives/24596 作者:July ;致謝:pluskid、白石、JerryLead。 出處:結構之法演算法之道blog。 前言 動筆寫這個支援向量機(support vector mach

支援向量通俗導論

第一層、瞭解SVM 支援向量機,因其英文名為support vector machine,故一般簡稱SVM,通俗來講,它是一種二類分類模型,其基本模型定義為特徵空間上的間隔最大的線性分類器,其學習策略

支援向量通俗導論 理解SVM境界

                            支援向量機通俗導論(理解SVM的三層境界)作者:July 。致謝:pluskid、白石、JerryLead。說明:本文最初寫於2012年6月,而後不斷反反覆覆修改&優化,修改次數達上百次,最後修改於2016年11月。宣告:本文於2012年便早已附

SVM:支援向量通俗導論

有大量修改,作者的篇幅較長,分析比較直觀,由淺入深,不過不適於數學專業閱讀,更適合於軟體工程師閱覽。建議拜訪原作者。 支援向量機通俗導論(理解SVM的三層境界) 作者:July、pluskid ;致謝:白石、JerryLead  出處:結構之法演算法之道blo

支援向量通俗導論 ——理解 SVM境界

AI菌今天要推薦的不是一本書,而是一篇關於向量機的超詳細博文:http://blog.csdn.

轉載統計學之三大相關性係數pearson、spearman、kendall

三個相關性係數(pearson, spearman, kendall)反應的都是兩個變數之間變化趨勢的方向以及程度,其值範圍為-1到+1,0表示兩個變數不相關,正值表示正相關,負值表示負相關,值越大表示相關性越強。 person correlation coefficient(皮

轉載CSS3 常用四個動畫旋轉 放大 旋轉放大 移動

                     CSS3 常用四個動畫(旋轉、放大、旋轉放大、移動)在頁面設計中,給一些圖示或者圖片加上一些動畫效果,會給人非常舒服的感覺。這裡收集了四個常用動畫效果,以便不時之需。轉載原文效果一:360°旋轉 修改rotate(旋轉度數)* {    transition:All

演算法學習求兩陣列求差數Java,境界

【題目描述】:兩個陣列,一個A陣列200個,,另一個B陣列199個,兩個陣列亂序,但是差一個數,,,找出差的是那個數。 一。境界1(60分) 【1】遍歷A陣列,對每個數執行【2】操作 【2】遍歷B陣列對比是否存在此數。 參考程式碼如下: /**

機器學習筆記17支援向量

【參考資料】 【1】《統計學習方法》 基本概念 當訓練資料線性可分時,通過硬間隔最大化,學習一個線性的分類器,即線性可分支援向量機,又稱硬間隔支援向量機; 當訓練資料近似線性可分時,通過軟間隔(增加一個鬆弛因子)後學習一個線性的分類器,即軟間隔支援向量機;

機器學習實戰支援向量----分類庫和簡單訓練mnist

前面已經對mnist資料集進行了讀取,現在我們可以直接使用sklearn.svm模組中的演算法庫對mnist資料集進行訓練。 【svm模組】 演算法庫: sklearn.svm模組中提供了這些庫: 大概分成這幾類(除了svm_l1_min_c

機器學習演算法推導支援向量

線性可分   在二維平面中,正樣本和負樣本可以由一條直線完全隔開。假設存在直線 y =

機器學習實戰-python3支援向量Support Vecrtor Machines SVM

工具:PythonCharm 書中的程式碼是python2的,而我用的python3,結合實踐過程,這裡會標註實踐時遇到的問題和針對python3的修改。 實踐程式碼和訓練測試資料可以參考這裡 https://github.com/stonycat/ML

機器學習支援向量SVM原理及推導

參考:http://blog.csdn.net/ajianyingxiaoqinghan/article/details/72897399 部分圖片來自於上面部落格。 0 由來 在二分類問題中,我們可以計算資料代入模型後得到的結果,如果這個結果有明顯的區別,

深度學習基礎-06支援向量SVM-線性不可分

 1 SVM的優點                                      

深度學習基礎-05支援向量SVM-線性可分

Support Vector Machine 目錄 1背景 2 機器學習的一般框架 3 什麼是超平面 4 線性可區分(linear separatable)和線性不可區分(linear inseparatable) 5 如何計算超平面以及舉例 1背景 Vladim