Saya mencoba menafsirkan bobot variabel yang diberikan dengan memasang SVM linear.
Cara yang baik untuk memahami bagaimana bobot dihitung dan bagaimana menafsirkannya dalam kasus SVM linier adalah dengan melakukan perhitungan dengan tangan pada contoh yang sangat sederhana.
Contoh
Pertimbangkan dataset berikut yang dapat dipisahkan secara linear
import numpy as np
X = np.array([[3,4],[1,4],[2,3],[6,-1],[7,-1],[5,-3]] )
y = np.array([-1,-1, -1, 1, 1 , 1 ])
Memecahkan masalah SVM dengan inspeksi
x2=x1−3wTx+b=0
w=[1,−1] b=−3
2||w||22√=2–√42–√
c
cx1−cx2−3c=0
w=[c,−c] b=−3c
Memasukkan kembali ke persamaan untuk lebar yang kita dapatkan
2||w||22–√cc=14=42–√=42–√
w=[14,−14] b=−34
(Saya menggunakan scikit-belajar)
Jadi saya, inilah beberapa kode untuk memeriksa perhitungan manual kami
from sklearn.svm import SVC
clf = SVC(C = 1e5, kernel = 'linear')
clf.fit(X, y)
print('w = ',clf.coef_)
print('b = ',clf.intercept_)
print('Indices of support vectors = ', clf.support_)
print('Support vectors = ', clf.support_vectors_)
print('Number of support vectors for each class = ', clf.n_support_)
print('Coefficients of the support vector in the decision function = ', np.abs(clf.dual_coef_))
- w = [[0.25 -0.25]] b = [-0.75]
- Indeks vektor dukungan = [2 3]
- Vektor pendukung = [[2. 3.] [6. -1.]]
- Jumlah vektor dukungan untuk setiap kelas = [1 1]
- Koefisien vektor dukungan dalam fungsi keputusan = [[0,0625 0,0625]]
Apakah tanda bobot itu ada hubungannya dengan kelas?
Tidak juga, tanda bobotnya ada hubungannya dengan persamaan bidang batas.
Sumber
https://ai6034.mit.edu/wiki/images/SVM_and_Boosting.pdf