天天看點

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

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

版權聲明:本文為部落客原創文章,轉載請注明出處。 https://blog.csdn.net/chaipp0607/article/details/73716226

學習SVM(一) SVM模型訓練與分類的OpenCV實作 

學習SVM(二) 如何了解支援向量機的最大分類間隔 

學習SVM(三)了解SVM中的對偶問題 

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

學習SVM(五)了解線性SVM的松弛因子

我們在開始接觸SVM時肯定聽到過類似這樣的話,決定決策邊界的資料叫做支援向量,它決定了margin到底是多少,而max margin更遠的點,其實有沒有無所謂。 

然後一般會配一張圖說明一下哪些是支援向量(Support Vector),這個圖在之前的學習SVM(二) 如何了解支援向量機的最大分類間隔裡面就有,這裡不在重複貼了。

但是問題的關鍵是,這些Support Vector是怎麼被确定的呢? 

在學習SVM(三)了解SVM中的對偶問題計算得到新的優化目标:

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

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

學習SVM(四) 了解SVM中的支援向量(Support Vector)學習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)學習SVM(四) 了解SVM中的支援向量(Support Vector)

, 

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

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

超平面(w,b)能夠将訓練樣本正确分類,即對于

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

,是以去掉絕對值可以得到關于b的公式。

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

學習SVM(四) 了解SVM中的支援向量(Support Vector)學習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項裡面是有重複的,因為a1*a2 = a2*a1,是以最後會剩下6項: 

a1*a1,a2*a2,a3*a3,2*a1*a3,2*a1*a2,2*a2*a3,舉個例子确定前面的系數: 

C*a1*a2 = [(x1)(x2)*y1*y2]a1*a2 

C=2*[(3,3)(4,3)](1)(1)=2(12+9)=42

是以最後的結果如下: 

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

由限制條件得到:a3=a1+a2,帶入到min中可以求得一個關于a1 

和a2的函數:

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

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

學習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)學習SVM(四) 了解SVM中的支援向量(Support Vector)

a2=0時,我們應該把a2的值往s對a1的偏導裡面帶入: 

a1=1/4 (滿足條件) 

此時: 

學習SVM(四) 了解SVM中的支援向量(Support Vector)學習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)學習SVM(四) 了解SVM中的支援向量(Support Vector)

w1=w2=0.5 

對于支援向量x1,計算b的值: 

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

對于非支援向量x2,計算b的值: 

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

顯然,由于b的公式由支援向量與決策平面的距離推導得到,是以x2的計算結果是錯誤的。 

于是得到最後的決策邊界為: 

0.5x1+0.5x2+2=0

繼續閱讀