通俗易懂--SVM演算法講解(演算法+案例)
尋覓網際網路,少有機器學習通俗易懂之演算法講解、案例等,專案立於這一問題之上,整理一份基本演算法講解+案例於文件,供大家學習之。通俗易懂之文章亦不可以面概全,但凡有不正確或爭議之處,望告知,自當不吝賜教!
ofollow,noindex">GitHub/">GitHub地址(程式碼加資料)
1.SVM講解
SVM是一個很複雜的演算法,不是一篇博文就能夠講完的,所以此篇的定位是初學者能夠接受的程度,並且講的都是SVM的一種思想,通過此篇能夠使讀著會使用SVM就行,具體SVM的推導過程有一篇博文是講得非常細的,具體連結我放到最後面,供大家參考。
1.1支援向量機(SVM)的由來
首先我們先來看一個3維的平面方程: Ax+By+Cz+D=0
這就是我們中學所學的,從這個方程我們可以推匯出二維空間的一條直線: Ax+By+D=0
那麼,依次類推,更高維的空間叫做一個超平面:

image
x代表的是一個向量,接下來我們看下二維空間的幾何表示:

image
SVM的目標是找到一個超平面,這個超平面能夠很好的解決二分類問題,所以先找到各個分類的樣本點離這個超平面最近的點,使得這個點到超平面的距離最大化,最近的點就是虛線所畫的。由以上超平面公式計算得出大於1的就屬於打叉分類,如果小於0的屬於圓圈分類。
這些點能夠很好地確定一個超平面,而且在幾何空間中表示的也是一個向量, 那麼就把這些能夠用來確定超平面的向量稱為支援向量(直接支援超平面的生成),於是該演算法就叫做支援向量機(SVM)了。
1.2如何找到超平面
函式間隔
在超平面w x+b=0確定的情況下,|w x+b|能夠表示點x到距離超平面的遠近,而通過觀察w x+b的符號與類標記y的符號是否一致可判斷分類是否正確,所以,可以用(y (w*x+b))的正負性來判定或表示分類的正確性。於此,我們便引出了函式間隔(functional margin)的概念。定義函式間隔(用

image
表示)為:

image
但是這個函式間隔有個問題,就是我成倍的增加w和b的值,則函式值也會跟著成倍增加,但這個超平面沒有改變。所以有函式間隔還不夠,需要一個幾何間隔。
幾何間隔
我們把w做一個約束條件,假定對於一個點 x ,令其垂直投影到超平面上的對應點為 x0 ,w 是垂直於超平面的一個向量,為樣本x到超平面的距離,如下圖所示:

image
根據平面幾何知識,有

image

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

image

image.png
1.4後續問題
至此,SVM的第一層已經瞭解了,就是求最大的幾何間隔,對於那些只關心怎麼用SVM的朋友便已足夠,不必再更進一層深究其更深的原理。
SVM要深入的話有很多內容需要講到,比如:線性不可分問題、核函式、SMO演算法等。
在此推薦一篇博文,這篇博文把深入的SVM內容也講了,包括推導過程等。如果想進一步瞭解SVM,推薦看一下:
支援向量機通俗導論: https://blog.csdn.net/v_JULY_v/article/details/7624837#commentBox