¿Cómo obtener límites de decisión de SVM lineal en R?


9

Necesito un paquete que me pueda dar la ecuación para un modelo SVM lineal. Actualmente estoy usando e1071 así:

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

Sin embargo, no estoy seguro de cómo e1071::svm()selecciona las clases positivas y negativas, por lo que creo que esto podría arruinarse con diferentes conjuntos de datos. ¿Alguien puede confirmar cómo esta función decide qué clase es positiva y cuál es negativa?

Además, ¿hay un paquete mejor para esto?


1
Proporcioné cierta información al respecto en un hilo relacionado: Calcular el límite de decisión de un modelo SVM lineal .
chl

Respuestas:


1

Xre

d <- sum(w * x) + b

re>0 0X+1-1newdata

predict(m, newdata)

o

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

Tenga cuidado al usar SVM desde el paquete e1071, vea ¿ Problema con e1071 libsvm? pregunta. Varios otros paquetes de SVM para R son kernlab, klaR y svmpath; consulte esta descripción general: Admite máquinas de vectores en R de A. Karatzoglou y D. Meyer.


2
Gracias, pero mi pregunta es sobre cómo obtengo los valores w y b. Además, sobre el valor de la decisión, pregunto cómo e1071 decide qué etiqueta dada es positiva y negativa para los datos de entrenamiento cuando se pasan los factores.
Reisner

1
No estoy familiarizado con e1071, pero conozco SVM. Si una clase se considera positiva o negativa no afectará el resultado. Puede tomar cualquier conjunto de datos e intercambiar las etiquetas de clase y aún así debería obtener el mismo resultado en términos de clasificar los puntos de prueba (para los mismos parámetros). Los positivos y negativos se usan para determinar si la instancia cae en el lado derecho del límite de decisión.
karenu
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.