Я пытаюсь интерпретировать переменные веса, заданные путем подбора линейного SVM.
Хороший способ понять, как рассчитываются веса и как их интерпретировать в случае линейного SVM, - выполнить вычисления вручную на очень простом примере.
пример
Рассмотрим следующий набор данных, который является линейно отделимым
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 осмотром
Икс2= х1- 3весTх + б = 0
w = [ 1 , - 1 ] b = - 3
2| | ш | |22√= 2-√4 2-√
с
с х1- с х2- 3 с = 0
w = [ c , - c ] b = - 3 c
Подставив обратно в уравнение для ширины, мы получим
2| | ш | |22-√сс = 14= 4 2-√= 4 2-√
w = [ 14, - 14] b = - 3 4
(Я использую scikit-learn)
Так что я, вот код для проверки наших ручных расчетов
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]
- Индексы опорных векторов = [2 3]
- Вспомогательные векторы = [[2. 3.] [6. -1.]]
- Количество опорных векторов для каждого класса = [1 1]
- Коэффициенты вектора поддержки в решающей функции = [[0,0625 0,0625]]
Знак веса имеет какое-либо отношение к классу?
Не совсем, знак весов имеет отношение к уравнению граничной плоскости.
Источник
https://ai6034.mit.edu/wiki/images/SVM_and_Boosting.pdf