關於SVM--支持向量機的一個故事


                            關於SVM(support vector machine)--支持向量機的一個故事

很久很久以前,有個SVM, 然后,……………………被deep learning 殺死了……………………………………

 

 

 

 

 

 

 

 

 

 

完結……撒花

 

 

 

 

 

 

 

故事的起源:

好吧,關於支持向量機有一個故事 ,故事是這樣子的:

在很久以前的情人節,大俠要去救他的愛人,但魔鬼和他玩了一個游戲。

魔鬼在桌子上似乎有規律放了兩種顏色的球,說:“你用一根棍分開它們?要求:盡量在放更多球之后,仍然適用。”

 

 

於是大俠這樣放,干的不錯?

 

 

然后魔鬼,又在桌上放了更多的球,似乎有一個球站錯了陣營。

 

 

SVM就是試圖把棍放在最佳位置,好讓在棍的兩邊有盡可能大的間隙

 

 

現在即使魔鬼放了更多的球,棍仍然是一個好的分界線

 

 

然后,在SVM 工具箱中有另一個更加重要的 trick。 魔鬼看到大俠已經學會了一個trick,於是魔鬼給了大俠一個新的挑戰。

 

 

現在,大俠沒有棍可以很好幫他分開兩種球了,現在怎么辦呢?當然像所有武俠片中一樣大俠桌子一拍,球飛到空中。然后,憑借大俠的輕功,大俠抓起一張紙,插到了兩種球的中間。

 

 

現在,從魔鬼的角度看這些球,這些球看起來像是被一條曲線分開了。

 

 

再之后,無聊的大人們,把這些球叫做 data,把棍子 叫做 classifier, 最大間隙trick 叫做optimization, 拍桌子叫做kernelling, 那張紙叫做hyperplane」。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

正文開始:

svmSVM的意義究竟是怎樣的?首先是一堆需要分類的數據,就一維數據而言,目標是找到其使其可分離的分界點,二維數據而言就是,使其分離的線,就三維而言,就是使其分離的平面。這個分界線與兩類數據最近的點則稱為max-margin(最大邊緣)。當然,簡單的說下圖中黑線位置可以是我們找到分界線.然而這個並非是最優的.通常而言,我們渴望所得到最大邊緣是越大越好的,這樣表示這個找到的最大Margin,是最優的,即下圖黃線.也就是說,這樣的分界線能夠很好的將兩類數據進行分離,即下圖紅線。而我們選擇數據在進行訓練的時候也就是為了能夠找到很好的分界線,這樣,當測試數據進來,依據在紅色線位置,我們可以進行分類。ok,現在的問題是給了我這樣的一大堆數據,我事先也是知道的,這些數據是怎樣區分的,SVM是一種監督式學習方法的原因也在於此。

       問題出現了,我們要如何找到這個分界線。假定我們是有這樣的數據的,(x1, y1), (x2, y2), ...,(xn, yn), x用來代表數據,它可以是任意維度的,而y是表示代表的數據究竟是一個正樣本,還是負樣本,(即這個樣本是屬於A,還是屬於B).

 

 

這就是回到了之前的問題,如何找到這樣的一條線:

 

 

,首先我們假設,這個給出我們對數據的判定規則,給定一條直線的公式為:

         y=WTX+b,

如果使得y > 0,則為正樣本,y < 0則為負樣本,我們的目標就很明確的知道,這樣我們的目標就變成了找到y=0,這個直線.也就是為了能夠求出W,b這兩個參數.

有沒有很奇怪,為什么這里的W會有一個轉置符號?

其實,不可以單純的理解為W是一個值,這里是一個向量(我已經加粗了,思密達)這里是為了考慮多維的情況.

就二維而言,而上面的橙色線我們有一個名字,support hyperplane(支撐平面).這兩個直線的公式為:

                                                        WTX =δ+b

                                                        WTX =δ-b,

 

 

由於這里的W,b是未知參數,這個公式隨意的在兩邊乘以一個非零參數,仍然不變,所以我們可以令δ=1.,這樣我們就得到max margin 的距離公式,即:

,

其中兩倍的d即為 margin.所margin = 2d = 2/||W||,而為了獲得最大的 (max) margin,其實就是想找最小的||W||。我們的約束條件是,對於任意的正樣本:

 

 

對於任意的負樣本:

 

 

這個限制條件是我們進行接下來處理的關鍵,同時這連個式子可以合並為:

 

 

於是我們得到以下目標公式:

 

 

而這個問題就是SVM的核心,通過這個問題就可以求解出W,b,上式中的最小化問題其實就是我們要進行分類的數學表達形式。其中除以2,只是為了后續的結果好看,並不影響最終結果。其中這里面的取平方有着比較重要的意義,這里后面將會提到。(ps:這里的取平方和不去平方的意義是相同的--之前是為了獲得最大的 ,現在是為了獲得最小的

 

,問題是等價的)

前面所說的是線性可分的情況,這時,如果是線性不可分,即如下圖所示:

 

 

 

這種情況下,如果我們只是單純的考慮讓其可分,這是不可能的。因為他們本來就分不開。這樣我們就引入了一個誤差選項,ε,我們是允許在分類過程中出現誤差的,用以保證其在整體的最優。(即,不能因為一個老鼠而壞了一鍋湯)。所以我們的判決條件變為:

 

 

 

當然,這個誤差項是我們自行調節的,如果太大,我們得到的分界線(面or something else, max margin),就會容錯性太強(錯的太多),大到一定程度,這樣我們還要這個分界線干么?

 

所以我們是希望有點誤差,但是希望這個誤差不要太大。這樣我們的正負樣本又能快樂的分類了。不會因為個別的樣本影響到整體的分類結果。於是我們又引入了一個懲罰因子C,這樣總體可忍受誤差變為:

 

 

這樣我們剛才的目標函數就變為:

 

 

這兩種目標函數代表svm的兩種形式(hard-margin and soft-margin)。這個問題和上面的一樣目標一樣是一個QP問題(Quadratic  programming),其實問題只要不是NP問題,數學家總有辦法求解。至此線性分類結束。

 

然而實際中,可能存在的是無法分類的情況,這樣的:

 

 

所以,這個問題怎么求解?如果還想找到那樣的一個分界線,很明顯,是不可能的。

於是我們便引入了一個SVM實際用途很重要的一種形式:kernel--核函數

這樣先回到最初的目標函數:

 

 

 

引入拉格朗日乘子,上式的問題可以變為:

 

 

即目標問題變為求 的最小值問題,我們知道,一般這樣的極值點通常是在其導數等於零時取得,於是對w,b 分別求偏微分,可以得到:

 

將得到的結果帶入初始目標函數,這樣激動人心的時刻到了,原目標函數變為:

 

 

目標函數變為上面這樣,這里需要指出的是,這里的 y都是常量,只有為一個多維向量。如果原始數據 是不可分,如上所示,那么我們可以讓   

 

進行線性映射到其他空間,這樣上面紅色框內就變成:

 

這樣在原來空間計算的問題就轉換為映射空間的問題,也就是

 

 

是不是,很吃驚,當我看到這,我也很吃驚。上述的轉換是有深層含義的,如果我們的數據維度很低,只是在二維空間的一個點的位置,那么我們有多種方式進行分類,KNN等也許都可以,畢竟計算量並不大。關鍵是如果我們的維度很高,甚至接近無限維,這樣我們再進行分類,有些分類方案不太適合,而這種方案由於計算的內積,計算的結果是一個值,這樣即使很高維度的依然可以轉換向量內積來計算,大大的減少了計算量。(個人理解)。於是原來的問題就可以分類了,就是這樣。

除了上述的線性映射,還有其他種類的:

多項式核(Polynomial Kernel)

 

 

徑向基核函數(RBF)(Radial Basis Function)

 

 

也叫高斯核(Gaussian Kernel),因為可以看成如下核函數的領一個種形式:

 

 

徑向基函數是指取值僅僅依賴於特定點距離的實值函數,也就是 。任意一個滿足 特性的函數 Φ都叫做徑向量函數,標准的一般使用歐氏距離,盡管其他距離函數也是可以的。

。 

 至此關於SVM的基礎就是這樣,具體的證明可以參考下面的文檔。

 最后,我的願望是……

世界和平,阿門

參考文檔:

 

1:http://www.dataguru.cn/forum.php?mod=viewthread&tid=371987

         --核函數相關,那個會轉的圖不錯

2:http://blog.csdn.net/v_july_v/article/details/7624837

         --SVM大全,從入門到放棄

3:http://www.csie.ntu.edu.tw/~cjlin/libsvm/

--一個很不錯的svm網站,內部有個黑框,可以自行調整參數C,ε,對線性核RBF核會有個直觀感受

4:http://blog.csdn.net/abcjennifer/article/details/7849812

--SVM的細致推導,源自一個網易公開課,

5:https://en.wikipedia.org/wiki/Support_vector_machine

--wiki百科--自由的百科全書

6:http://open.163.com/movie/2008/1/C/6/M6SGF6VB4_M6SGJVMC6.html

---Andrew Ng,機器學習大神

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM