Sto cercando di interpretare i pesi variabili dati montando un SVM lineare.
Un buon modo per capire come vengono calcolati i pesi e come interpretarli nel caso di SVM lineare è eseguire i calcoli a mano su un esempio molto semplice.
Esempio
Si consideri il seguente set di dati che è separabile linearmente
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 ])
Risolvere il problema SVM mediante ispezione
X2= x1- 3wTx + b = 0
w = [ 1 , - 1 ] b = - 3
2| | w | |22√= 2-√4 2-√
c
c x1- c x2- 3 c = 0
w = [ c , - c ] b = - 3 c
Ricollegando l'equazione per la larghezza che otteniamo
2| | w | |22-√cc = 14= 4 2-√= 4 2-√
w = [ 14, - 14] b = - 3 4
(Sto usando Scikit-Learn)
Anche io, ecco un po 'di codice per controllare i nostri calcoli manuali
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]
- Indici dei vettori di supporto = [2 3]
- Supporto vettori = [[2. 3.] [6. -1.]]
- Numero di vettori di supporto per ogni classe = [1 1]
- Coefficienti del vettore di supporto nella funzione decisionale = [[0.0625 0.0625]]
Il segno del peso ha qualcosa a che fare con la classe?
Non proprio, il segno dei pesi ha a che fare con l'equazione del piano perimetrale.
fonte
https://ai6034.mit.edu/wiki/images/SVM_and_Boosting.pdf