Как получить границы решения от линейного SVM в R?

9

Мне нужен пакет, который может дать мне уравнение для линейной модели SVM. В настоящее время я использую E1071 так:

library(e1071)
m = svm(data, labels, type='C', kernel='linear', cost=cost, probability=FALSE, scale=scale)
w = t(m$coefs) %*% data[m$index,]  #Weight vector
b = -model$rho #Offset

Тем не менее, я не уверен, как e1071::svm()выбирать положительные и отрицательные классы, поэтому я думаю, что это может испортить разные наборы данных. Кто-нибудь может подтвердить, как эта функция решает, какой класс является положительным, а какой отрицательным?

Кроме того, есть ли лучший пакет для этого?

Рейснер
источник
1
Я предоставил некоторую информацию об этом в связанном потоке: Вычисление границы решения линейной модели SVM .
chl

Ответы:

1

Для точки данных ваш SVM вычисляет значение решения следующим образом:дxd

d <- sum(w * x) + b

Если то метка равна , иначе это . Вы также можете получить метки или значения решений для матрицы данных , сказавx + 1 - 1d>0x+11newdata

predict(m, newdata)

или

predict(m, newdata, decision.values = TRUE)

Будьте осторожны при использовании SVM из пакета e1071, см. Проблема с e1071 libsvm? вопрос. Несколько других пакетов SVM для R - это kernlab, klaR и svmpath, см. Этот обзор: опорные векторные машины в R от A. Karatzoglou и D. Meyer.

Лео
источник
2
Спасибо, но мой вопрос о том, как я получаю значения w и b. Также, что касается значения решения, я спрашиваю, как e1071 решает, какая из этих меток является положительной и отрицательной для данных обучения, когда вы передаете эти факторы.
Reisner
1
Я не знаком с е1071, но я знаю SVM. Будет ли класс положительным или отрицательным, не повлияет на результат. Вы можете взять любой набор данных и поменять местами метки классов, и вы все равно должны получить тот же результат с точки зрения классификации контрольных точек (для тех же параметров). Положительное и отрицательное значения используются для определения того, находится ли экземпляр на правой стороне границы решения.
Карену