Machine-Learning
支持向量機 - 手動計算 w
我正在研究一個簡單的 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=x1−3 . 使用公式 wTx+b=0 我們可以得到參數的第一個猜測為
w=[1,−1] b=−3
使用這些值,我們將獲得支持向量之間的以下寬度: 2√2=√2 . 再次通過檢查,我們看到支持向量之間的寬度實際上是長度 4√2 意味著這些值不正確。
回想一下,將邊界縮放一個因子 c 不改變邊界線,因此我們可以將方程推廣為
cx1−xc2−3c=0
w=[c,−c] b=−3c回到我們得到的寬度的方程
2||w||=4√2 2√2c=4√2 c=14
因此參數實際上是 w=[14,−14] b=−34
找到的值 αi 我們可以使用來自對偶問題的以下兩個約束:
w=m∑iαiy(i)x(i)
m∑iαiy(i)=0並利用以下事實 αi≥0 僅對於支持向量(即在這種情況下為 3 個向量),我們獲得聯立線性方程組: [6α1−2α2−3α3 −1α1−3α2−4α3 1α1−2α2−1α3]=[1/4 −1/4 0] α=[1/16 1/16 0]
來源