訓練集 => 提取特徵向量 => 結合必定的算法(分類器:好比決策樹,KNN) => 得出結果算法
圖中有黑色和白色兩類色點,很明顯H1不能分開兩類點,H2勉強能夠,可是H3效果是最好的。margin越大,產生偏差的可能性越小。框架
SVM尋找區分兩類的超平面(hyper plane),使邊際(margin)最大,當一個新的n維點輸入時根據其在超平面的哪一側將其歸爲那一類。機器學習
下面介紹邊際的概念:學習
Q1:總共能夠有多少個可能的超平面?
A1:無數條測試
Q2:如何選取使邊際(margin)最大的超平面(Max Margin Hyperplane)?
A2:超平面到一側最近點的距離等於到另外一側最近點的距離,兩側的兩個超平面平行。優化
Q3:爲何要選擇邊際最大的超平面呢
A3:是爲了新的測試點輸入時能夠根據在超平面的哪一側更精確地判斷測試點是屬於哪一類樣例。spa
前面幾張圖的例子都是比較完美的例子,能夠用一條直線來將兩類樣例分開,稱爲線性可區分,而如圖的狀況下就沒辦法直接用一條直接將兩類樣例分開,稱爲線性不可區分。後者更復雜,因此這裏咱們先討論線性可區分的狀況。.net
超平面能夠定義爲(中間那條線):W*X + b = 0orm
這裏W是N維的權重,W={w1,w2,.....wn}
n是特徵值得個數
X是N維的訓練樣例,例如一個樣本點的座標是(3,8),則xT=(3,8) ,而不是x=3(通常說向量都是說列向量,所以以行向量形式來表示時,就加上轉置)。
b是偏向biasblog
就比如二維直線的方程式y=kx+吧,這裏只是擴展到N維,點的座標是(X1,X2,X3,...,Xn),W就比如擴展到N維的斜率k。
假設二維特徵向量:X=(x1,x2),把b想象爲額外的wight(w0),超平面方程爲:
W*X + b = 0 => 向量W*向量X +w0=0 => (w1,w2)*(x1,x2) + w0 = 0 => w1*x1 + w2*x2 + w0 = 0
全部超平面右上方的點知足:w1*x1 + w2*x2 + w0 > 0
全部超平面左上方的點知足:w1*x1 + w2*x2 + w0 < 0
將兩類樣例的分類標記classlabel分別用值+1和-1,字母y表示,超平面兩邊邊際的兩個平行的超平面用H1和H2表示,令兩側邊際線上的點代入結果=1和-1,則H1,H2外側:
H1:W1*X1 + W2*X2 + b >= 1, y=+1
H2:W1*X1 + W2*X2 + b <= -1, y=-1
綜合以上兩式,獲得公式(1):
y*(W1*X1 + W2*X2 + b) >= 1
也就是說全部訓練集的點都知足這個公式
全部坐落在邊際的兩邊的超平面上的被稱做"支持向量(support vectors)",分界的超平面和H1,H2上任意一點的距離=1/(||W||),||W||是向量的範數, (i.e:其中||W||是向量的範數(norm))。
因此,最大邊際距離爲:2/(||W||)
利用一些數學推導,以上公式(1)可變爲有限制的凸優化問題(convex quadratic optimization);
利用karush-Kuhn-Tucker(KKT)條件和拉格朗日公式,能夠推出MMH能夠被表示爲如下"決定邊界":
其中,yi是支持向量點Xi(support vector)的類別標記(class label),XT是要測試的實例,阿爾法i和b0是剛纔一系列計算中獲得的具體值,l是支持向量點的個數。
如圖,已知訓練集(2,3),(1,1),(2,0)這三個點,(2,3)是第一類,(1,1),(2,0)是第二類,怎樣進行SVM計算呢。
首先能夠看出支持向量是(2,3)和(1,1),向量W =(2,3)-(1,1) = (a,2a)
根據公式兩側邊際線上的點W1*X1 + W2*X2 + b = 1和-1,能夠列出:
2*a + 3*2a + b =1
1*a + 1*2a + b = -1
解得 a=0.4,b=-2.2
則
向量W = (0.4,0.8)
g(向量x) = 0.4 * X1 + 0.8 * X2 - 2.2
經過這個方程就能夠對平面中的點進行判斷,凡是第一類的點也就是是分界線上方的點座標代入,結果必然大於0,第二類的點代入結果必然小於0,這樣也就創建了SVM的方程。
另外咱們能夠看出SVM能夠解決兩類實例的分類問題,但通常問題中,樣例的類別每每不止兩類,這時候SVM是怎麼處理的呢?好比有10類的樣例,怎麼進行分類判斷?只須要創建10個SVM方程就能獲得結果。好比第一個是類別1,第二個是類別2到10的集合,這樣就能創建一個SVM方程;第一個是類別2,第二個是類別1和類別3到10的集合,這樣就能創建第二個SVM方程,以此類推。
最後總結一下SVM的特色: