Ich versuche, die variablen Gewichte zu interpretieren, die durch Anpassen einer linearen SVM gegeben sind.
Ein guter Weg, um zu verstehen, wie die Gewichte berechnet werden und wie sie im Falle einer linearen SVM interpretiert werden, besteht darin, die Berechnungen von Hand an einem sehr einfachen Beispiel durchzuführen.
Beispiel
Betrachten Sie den folgenden Datensatz, der linear trennbar ist
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 ])
Lösen des SVM-Problems durch Inspektion
Bei der Prüfung können wir sehen, dass die Grenzlinie, die die Punkte mit dem größten "Rand" trennt, die Linie . Da die Gewichte der SVM proportional zur Gleichung dieser Entscheidungsgeraden sind (Hyperebene in höheren Dimensionen), die eine erste Schätzung der Parameterx2=x1−3wTx+b=0
w=[1,−1] b=−3
Die SVM-Theorie besagt, dass die "Breite" des Randes durch . Mit der obigen Annahme erhalten wir eine Breite von . was durch Inspektion falsch ist. Die Breite beträgt2||w||222√=2–√42–√
Denken Sie daran, dass das Skalieren der Grenze um einen Faktor von die Grenzlinie nicht ändert, daher können wir die Gleichung verallgemeinern alsc
cx1−cx2−3c=0
w=[c,−c] b=−3c
Stecken Sie sich wieder in die Gleichung für die Breite, die wir bekommen
2||w||22–√cc=14=42–√=42–√
Daher sind die Parameter (oder Koeffizienten) tatsächlich
w=[14,−14] b=−34
(Ich benutze Scikit-Learn)
Hier ist ein Code, um unsere manuellen Berechnungen zu überprüfen
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]
- Indices of support vectors = [2 3]
- Stützvektoren = [[2. 3.] [6. -1.]]
- Anzahl der Unterstützungsvektoren für jede Klasse = [1 1]
- Koeffizienten des Trägervektors in der Entscheidungsfunktion = [[0.0625 0.0625]]
Hat das Vorzeichen des Gewichts etwas mit der Klasse zu tun?
Nicht wirklich, das Vorzeichen der Gewichte hat mit der Gleichung der Grenzfläche zu tun.
Quelle
https://ai6034.mit.edu/wiki/images/SVM_and_Boosting.pdf