學習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中的對偶問題計算得到新的優化目标:
注意這裡的限制條件有n+1個,之後隻需要根據Data(x),Label(y)求解出滿足條件的拉格朗日系數a,并将a帶回求得w和b,于是就有了最後的決策邊界。(w,b,x,y,a都是向量)
注意:在上面b的公式中,i=1,2,…,n。但是j卻沒有給值,這是因為j是任意一個支援向量都可以。
在這裡對w和b的公式的推導做一個簡短說明,w是通過拉格朗日求偏導後推出的;在學習SVM(二) 如何了解支援向量機的最大分類間隔中我們知道最大間隔為:
那麼支援向量到決策邊界的距離為:
,
同時根據點到直線的距離公式有:
超平面(w,b)能夠将訓練樣本正确分類,即對于
,是以去掉絕對值可以得到關于b的公式。
而非支援向量的資料就在求解參數a,w,b的過程中,前面的參數w求得的結果會為0,這樣就滿足了之前的說法,隻有支援向量在影響着決策邊界的确定,舉個例子:
上圖中有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
是以最後的結果如下:
由限制條件得到:a3=a1+a2,帶入到min中可以求得一個關于a1
和a2的函數:
要求它的最小值,求偏導啊~
最後求解得到:
a1 = 1.5
a2 = -1
而a2 = -1的點不滿于a2>0的條件,是以最小值在邊界上取得。邊界情況要麼是a1=0,要麼是a2=0,于是:
a1=0時,我們應該把a1的值往s對a2的偏導裡面帶入:
a2=2/13 (滿足條件)
此時:
a2=0時,我們應該把a2的值往s對a1的偏導裡面帶入:
a1=1/4 (滿足條件)
此時:
顯然後面的結果更小,是以:
a1 = 1/4
a2 = 0
a3 = 1/4
到這裡就能驗證上面的結論了,a1和a3是x1和x3的系數,x1和x3是支援向量,而x2不是,是以前面的系數是0。因為根據w求解公式,a2=0,是以x2對w權的最後取值沒有影響,是以x2不是支援向量。
最後一步,帶到上面的式子中求w,b:
w1=w2=0.5
對于支援向量x1,計算b的值:
對于非支援向量x2,計算b的值:
顯然,由于b的公式由支援向量與決策平面的距離推導得到,是以x2的計算結果是錯誤的。
于是得到最後的決策邊界為:
0.5x1+0.5x2+2=0