Doğrusal bir SVM yerleştirerek verilen değişken ağırlıkları yorumlamaya çalışıyorum.
Ağırlıkların nasıl hesaplandığını ve lineer SVM durumunda nasıl yorumlanacağını anlamanın iyi bir yolu hesaplamaları elle basit bir örnekle yapmaktır.
Örnek
Doğrusal olarak ayrılabilen aşağıdaki veri setini göz önünde bulundurun
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 ])
SVM problemini inceleme ile çözme
x2= x1- 3wTx + b = 0
w = [ 1 , - 1 ] b = - 3
SVM teorisi bize marjın "genişliğinin" tarafından verildiğini söyler.2| | w | |22√= 2-√4 2-√
c
c x1- c x2- 3 c = 0
W = [ c , - c ] b = - 3 C
Elde ettiğimiz genişlik için denklemi tekrar sokmak
2| | w | |22-√cc = 14= 4 2-√= 4 2-√
w = [ 14, - 14] B = - 3 4
(Ben scikit-learn kullanıyorum)
Öyleyse ben, manuel hesaplamaları kontrol etmek için bazı kod
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]
- Destek vektörlerinin endeksleri = [2 3]
- Destek vektörleri = [[2. 3.] [6. -1.]]
- Her sınıf için destek vektör sayısı = [1 1]
- Karar fonksiyonundaki destek vektörünün katsayıları = [[0.0625 0.0625]]
Kilo işaretinin dersle ilgisi var mı?
Tam olarak değil, ağırlıkların işaretinin sınır düzleminin denklemi ile ilgisi var.
Kaynak
https://ai6034.mit.edu/wiki/images/SVM_and_Boosting.pdf