我們都知道其經常被用來做分類問題,當計算機的能力不足時,SVM是一個最火的算法,直到多層神經網絡算法的出現。
介紹
將下面的點進行分類如何劃分?劃分為幾類呢?
220px-Svm_separating_hyperplanes_(SVG).svg.png
通過人的眼和人腦處理後,我們可以很快的分辨出是紅線劃分是最好的,可是計算機是如何才能知道,又如何制定規則呢?
SVM尋找區分兩類的超平面(hyper plane), 使邊際(margin)最大
Image [4].png
如上圖所示,將數據劃分開的平面有很多,圖一,圖二都可以將數據劃分開,但是每一種方式的劃分的平面又有很多個平面,比如將平面進行平移也可以將數據劃分開,但是是否可以一直平移?答案是否定的,它存在上下界(指的是恰好可以分開數據),也就是存在數據點正好落在分割面上,而這些點就是支持向量。
分類
按照分割的情況將SVM分為三種:
- 硬間隔支持向量機(線性可分支持向量機):當訓練數據線性可分時,可通過硬間隔最大化學得一個線性可分支持向量機。用通用的話來說就是上圖中的虛線間沒有數據點。
- 軟間隔支持向量機:當訓練數據近似線性可分時,可通過軟間隔最大化學得一個線性支持向量機。用通俗的話來講就是上圖中虛線間還存在部分數據點。
images [1].jpg
- 非線性支持向量機:當訓練數據線性不可分時,可通過核方法以及軟間隔最大化學得一個非線性支持向量機。無法用線性來進行劃分。比如上圖的情況。
算法
得到公式 Image [9].png
我們再次把這個圖放出來,首先我們要證明的就是線性可分支持向量機
Image [4].png
首先我們假設中間的超平面方程為:
Image [5].png
當然如上面所言,我們可以對這個超平面進行平移,直到達到不能移動的支持向量的點。
Image [8].png
如上圖公式所示,我們先證明的是二分類,讓等式大於1的為正例,小於1為負例。為什麼選1呢?其實你可以選任何數,同樣正例與父類用(1,-1)表示也是為了計算方便。 這樣我們可以很容易得出:
Image [9].png
這樣兩個公式就合併了,同時得出了條件了。
最大化邊際
我們都知道svm就是要尋找使邊際最大的那個狀態的超平面,用M來表示兩個邊界平面間的距離,那麼?
max M = ?
這時我們可以直接把公式簡化為,
Image [2].png
=1 兩個平面間的距離公式直接可以得出,
<code>M =|b+1-(b-1)|
/sqrt(w^2
+0
)=2
/||
w||
/<code>
所以M要最大,|w|就需要最小
所以我們得到的目標函數就是使 |w|最小,即|w|^2最小,為求導方便,我們設為求
<code>1
/2
|w|
^2
/<code>
最小。
構造函數
通過以上兩次分析,我們已經把問題轉化為了大學的數學問題
在已知
Image [9].png
的條件下,要使得
<code>1
/2
|w|
^2
/<code>
最小。
這就明顯變為了一個目標函數和一個約束條件,組合成的拉格朗日求最小值的問題了
但是由於條件是一個不等式,同時這個條件包含所有的數據點, 利用一些數學推倒,以上公式可變為有限制的凸優化問題(convex quadratic optimization)利用 Karush-Kuhn-Tucker(KKT)條件和拉格朗日公式,可以推出MMH可以被表示為以下“決定邊界“
Image [13].png
詳細的推倒在下面會附上。
這裡舉一個例子:
Image [15].png
Sklearn SVM
2 sklearn畫出決定界限
鏈接:https://www.jianshu.com/p/501505437200