Estoy tratando de interpretar los pesos de las variables dadas por el ajuste de una SVM lineal.
Una buena forma de entender cómo se calculan las ponderaciones y cómo interpretarlas en el caso de la SVM lineal es realizar los cálculos a mano en un ejemplo muy sencillo.
Ejemplo
Consideremos el siguiente conjunto de datos que es linealmente separable
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 simple]()
Resolución del problema de la SVM por inspección
Por inspección podemos ver que la línea límite que separa los puntos con mayor "margen" es la línea x2=x1−3 . Dado que los pesos de la SVM son proporcionales a la ecuación de esta línea de decisión (hiperplano en dimensiones superiores) utilizando wTx+b=0 una primera estimación de los parámetros sería
w=[1,−1] b=−3
La teoría de la SVM nos dice que la "anchura" del margen viene dada por 2||w|| . Utilizando la conjetura anterior obtendríamos un anchura de 2√2=√2 . lo cual, por inspección, es incorrecto. La anchura es 4√2
Recordemos que al escalar el límite por un factor de c no cambia la línea límite, por lo que podemos generalizar la ecuación como
cx1−cx2−3c=0 w=[c,−c] b=−3c
Introduciendo de nuevo la ecuación de la anchura obtenemos
2||w||=4√22√2c=4√2c=14
Por lo tanto, los parámetros (o coeficientes) son en realidad w=[14,−14] b=−34
(Estoy usando scikit-learn)
Yo también, aquí hay un código para comprobar nuestros cálculos manuales
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]
- Índices de los vectores de apoyo = [2 3]
- Vectores soporte = [[ 2. 3.] [ 6. -1.]]
- Número de vectores de soporte para cada clase = [1 1]
- Coeficientes del vector soporte en la función de decisión = [[0,0625 0,0625]]
¿El signo del peso tiene algo que ver con la clase?
En realidad no, el signo de los pesos tiene que ver con la ecuación del plano límite.
Fuente
https://ai6034.mit.edu/wiki/images/SVM_and_Boosting.pdf