學習SVM(四) 理解SVM中的支援向量(Support Vector)

步入量化學習艾莉絲發表於2018-09-06

我們在開始接觸SVM時肯定聽到過類似這樣的話,決定決策邊界的資料叫做支援向量,它決定了margin到底是多少,而max margin更遠的點,其實有沒有無所謂。 然後一般會配一張圖說明一下哪些是支援向量(Support Vector),這個圖在之前的學習SVM(二) 如何理解支援向量機的最大分類間隔裡面就有,這裡不在重複貼了。

但是問題的關鍵是,這些Support Vector是怎麼被確定的呢? 在學習SVM(三)理解SVM中的對偶問題計算得到新的優化目標:

寬客線上

學習SVM(四) 理解SVM中的支援向量(Support Vector)

注意這裡的約束條件有n+1個,之後只需要根據Data(x),Label(y)求解出滿足條件的拉格朗日系數a,並將a帶回求得w和b,於是就有了最後的決策邊界。(w,b,x,y,a都是向量)

學習SVM(四) 理解SVM中的支援向量(Support Vector)

注意:在上面b的公式中,i=1,2,…,n。但是j卻沒有給值,這是因為j是任意一個支援向量都可以。

在這裡對w和b的公式的推導做一個簡短說明,w是通過拉格朗日求偏導後推出的;在學習SVM(二) 如何理解支援向量機的最大分類間隔中我們知道最大間隔為:

學習SVM(四) 理解SVM中的支援向量(Support Vector)

那麼支援向量到決策邊界的距離為:

學習SVM(四) 理解SVM中的支援向量(Support Vector)

同時根據點到直線的距離公式有:

學習SVM(四) 理解SVM中的支援向量(Support Vector)

超平面(w,b)能夠將訓練樣本正確分類,即對於

學習SVM(四) 理解SVM中的支援向量(Support Vector)
因此去掉絕對值可以得到關於b的公式。

而非支援向量的資料就在求解引數a,w,b的過程中,前面的引數w求得的結果會為0,這樣就滿足了之前的說法,只有支援向量在影響著決策邊界的確定,舉個例子:

學習SVM(四) 理解SVM中的支援向量(Support Vector)

上圖中有3個點,x1(3,3),x2(4,3),x3(1,1),對應的:y1=y2=1,y3=-1。 很顯然x1和x3是兩個支援向量,在決策平面的兩側,我們帶入到上面的公式求解一下: 由於兩個求和公式(n=3),所以括號裡面的是項會有9個,可以理解為兩個for迴圈巢狀啊(哈~哈~),但是顯然這9項裡面是有重複的,因為a1a2 = a2a1,所以最後會剩下6項: a1a1,a2a2,a3a3,2a1a3,2a1a2,2a2a3,舉個例子確定前面的係數: Ca1a2 = [(x1)(x2)y1y2]a1a2 C=2*(3,3)(4,3)(1)=2(12+9)=42

所以最後的結果如下:

學習SVM(四) 理解SVM中的支援向量(Support Vector)

由約束條件得到:a3=a1+a2,帶入到min中可以求得一個關於a1 和a2的函式:

學習SVM(四) 理解SVM中的支援向量(Support Vector)

要求它的最小值,求偏導啊~

學習SVM(四) 理解SVM中的支援向量(Support Vector)

最後求解得到: a1 = 1.5 a2 = -1

而a2 = -1的點不滿於a2>0的條件,所以最小值在邊界上取得。邊界情況要麼是a1=0,要麼是a2=0,於是: a1=0時,我們應該把a1的值往s對a2的偏導裡面帶入: a2=2/13 (滿足條件) 此時:

學習SVM(四) 理解SVM中的支援向量(Support Vector)

a2=0時,我們應該把a2的值往s對a1的偏導裡面帶入: a1=1/4 (滿足條件) 此時:

學習SVM(四) 理解SVM中的支援向量(Support Vector)

顯然後面的結果更小,所以: a1 = 1/4 a2 = 0 a3 = 1/4

到這裡就能驗證上面的結論了,a1和a3是x1和x3的係數,x1和x3是支援向量,而x2不是,所以前面的係數是0。因為根據w求解公式,a2=0,所以x2對w權的最後取值沒有影響,所以x2不是支援向量。

最後一步,帶到上面的式子中求w,b:

學習SVM(四) 理解SVM中的支援向量(Support Vector)

w1=w2=0.5 對於支援向量x1,計算b的值:

學習SVM(四) 理解SVM中的支援向量(Support Vector)
對於非支援向量x2,計算b的值:
學習SVM(四) 理解SVM中的支援向量(Support Vector)

顯然,由於b的公式由支援向量與決策平面的距離推導得到,所以x2的計算結果是錯誤的。 於是得到最後的決策邊界為: 0.5x1+0.5x2+2=0

閱讀原文

相關文章