Eu estou tentando interpretar os pesos variáveis dados ajustando um SVM linear.
Uma boa maneira de entender como os pesos são calculados e como interpretá-los no caso de SVM linear é executar os cálculos manualmente em um exemplo muito simples.
Exemplo
Considere o seguinte conjunto de dados que é separável 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 ])
Resolvendo o problema SVM por inspeção
Por inspeção, podemos ver que a linha de fronteira que separa os pontos com a maior "margem" é a linha . Como os pesos do SVM são proporcionais à equação desta linha de decisão (hiperplano em dimensões mais altas) usando uma primeira estimativa dos parâmetros seriax2=x1−3wTx+b=0
w=[1,−1] b=−3
A teoria SVM nos diz que a "largura" da margem é dada por . Usando o palpite acima, obteríamos uma largura de . que, por inspeção, está incorreto. A largura é de2||w||22√=2–√42–√
Lembre-se de que escalar o limite por um fator de não altera a linha do limite; portanto, podemos generalizar a equação comoc
cx1−cx2−3c=0
w=[c,−c] b=−3c
Conectando novamente na equação para a largura que obtemos
2||w||22–√cc=14=42–√=42–√
Portanto, os parâmetros (ou coeficientes) são de fato
w=[14,−14] b=−34
(Estou usando o scikit-learn)
Eu também, aqui estão alguns códigos para verificar nossos cálculos manuais
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 vetores de suporte = [2 3]
- Vetores de suporte = [[2. 3.] [6. -1.]]
- Número de vetores de suporte para cada classe = [1 1]
- Coeficientes do vetor de suporte na função de decisão = [[0,0625 0,0625]]
O sinal do peso tem algo a ver com a classe?
Na verdade, o sinal dos pesos tem a ver com a equação do plano de fronteira.
Fonte
https://ai6034.mit.edu/wiki/images/SVM_and_Boosting.pdf