Machine-Learning

支持向量機 - 手動計算 w

  • June 28, 2018

我正在研究一個簡單的 SVM 示例,以獲取其工作方式背後的一些直覺。在 6 個數據點的情況下,是否可以計算和用手?直觀地說,我只能得到一個比例因子的正確值。

使用帶有線性內核的 Sklearn,正確的值是

直覺上我嘗試了不同的值:

  • 和它來自直線的直接方程. 這給出了正確的決策邊界和幾何邊距
  • 和這確保了但並沒有讓我走得更遠

例子

支持向量機簡單

數據集和 Sklearn 結果

import numpy as np
from sklearn.svm import SVC

X = np.array([[3,4],[1,4],[2,3],[6,-1],[7,-1],[5,-3]] )
y = np.array([-1,-1, -1, 1, 1 , 1 ])

clf = SVC(C = 1e5, kernel = 'linear')
clf.fit(X, y) 

通過檢查解決 SVM 問題

通過檢查我們可以看到邊界決策線是函數 x2=x13 . 使用公式 wTx+b=0 我們可以得到參數的第一個猜測為

w=[1,1]  b=3

使用這些值,我們將獲得支持向量之間的以下寬度: 22=2 . 再次通過檢查,我們看到支持向量之間的寬度實際上是長度 42 意味著這些值不正確。

回想一下,將邊界縮放一個因子 c 不改變邊界線,因此我們可以將方程推廣為

cx1xc23c=0

w=[c,c]  b=3c

回到我們得到的寬度的方程

2||w||=42 22c=42 c=14

因此參數實際上是 w=[14,14]  b=34

找到的值 αi 我們可以使用來自對偶問題的以下兩個約束:

w=miαiy(i)x(i)

miαiy(i)=0

並利用以下事實 αi0 僅對於支持向量(即在這種情況下為 3 個向量),我們獲得聯立線性方程組: [6α12α23α3 1α13α24α3 1α12α21α3]=[1/4 1/4 0] α=[1/16 1/16 0]

來源

引用自:https://stats.stackexchange.com/questions/353552