Calcular el límite de decisión de un modelo SVM lineal

19

Dados los vectores de soporte de un SVM lineal, ¿cómo puedo calcular la ecuación del límite de decisión?

dshin
fuente
w = suma sobre i (ai ti xi). Tendrás que minimizar el lagrangiano para encontrar los valores de los multiplicadores, ai. Me pregunto cómo obtuviste los vectores de soporte. el mismo proceso también debería darte el valor de ai.
euforia83
2
No puedo comentar todavía, pero creo que en la respuesta aceptada no deberían ser la línea de decisión y los márgenes: abline (b / w [2], - w [1] / w [2]) abline ((b + 1) / w [2], - w [1] / w [2], lty = 2) abline ((b-1) / w [2], - w [1] / w [2], lty = 2) ya que abline toma entrada como intercepción y pendiente respectivamente? wx-b = 0 que implica: w1.x1 + w2.x2 = b que implica (ya que x2 es la "y") abline (b / w [2], -w [1] / w [2]) Lo siento. es una publicación antigua pero pensé en preguntar.
Nepze Tyson
Bienvenido al sitio, @Nepze Tyson. Esta no es una respuesta a la pregunta del OP. Utilice solo el campo "Su respuesta" para proporcionar respuestas. Si tiene su propia pregunta, haga clic [ASK QUESTION]en en la parte superior de la página y pregúntela allí, entonces podemos ayudarlo adecuadamente. Como es nuevo aquí, puede leer nuestra página de recorrido , que contiene información para nuevos usuarios.
gung - Restablece a Monica
@Nepze Gracias por tu perspicaz comentario y por el tiempo y la atención que tomaste para hacerlo. Espero que conduzca a una respuesta mejorada aquí. También me gustaría unirme a Gung para darle la bienvenida a nuestro sitio.
Whuber

Respuestas:

29

The Elements of Statistical Learning , de Hastie et al., Tiene un capítulo completo sobre clasificadores de vectores de soporte y SVM (en su caso, comience la página 418 en la segunda edición). Otro buen tutorial es Support Vector Machines en R , de David Meyer.

XTβ+β0 0=0 0β=1β0 02/ /β

De la ayuda ksvm()en línea de en el paquete kernlab R, pero vea también kernlab: un paquete S4 para métodos de kernel en R , aquí hay un ejemplo de juguete:

set.seed(101)
x <- rbind(matrix(rnorm(120),,2),matrix(rnorm(120,mean=3),,2))
y <- matrix(c(rep(1,60),rep(-1,60)))
svp <- ksvm(x,y,type="C-svc")
plot(svp,data=x)

Tenga en cuenta que, en aras de la claridad, no consideramos muestras de entrenamiento y prueba. Los resultados se muestran a continuación, donde el sombreado de color ayuda a visualizar los valores de decisión ajustados; valores alrededor de 0 están en el límite de decisión.

texto alternativo

Llamar attributes(svp)le proporciona atributos a los que puede acceder, por ejemplo

alpha(svp)  # support vectors whose indices may be 
            # found with alphaindex(svp)
b(svp)      # (negative) intercept 

Entonces, para mostrar el límite de decisión, con su margen correspondiente, intentemos lo siguiente (en el espacio reescalado), que se inspira en gran medida de un tutorial sobre SVM realizado hace algún tiempo por Jean-Philippe Vert :

plot(scale(x), col=y+2, pch=y+2, xlab="", ylab="")
w <- colSums(coef(svp)[[1]] * x[unlist(alphaindex(svp)),])
b <- b(svp)
abline(b/w[1],-w[2]/w[1])
abline((b+1)/w[1],-w[2]/w[1],lty=2)
abline((b-1)/w[1],-w[2]/w[1],lty=2)

Y aquí está:

texto alternativo

chl
fuente
44
Hermoso, exactamente lo que estaba buscando. Las dos líneas: w <- colSums (coef (svp) [[1]] * x [unlist (alphaindex (svp)),]) b <- b (svp) fueron un regalo del cielo. ¡Gracias!
dshin
@chi: puede ser interesante echar un vistazo a mi respuesta a "cómo calcular el límite de decisión de un SVM": stats.stackexchange.com/questions/164935/…
4

Es una combinación lineal de los vectores de soporte donde los coeficientes están dados por los multiplicadores de Lagrange correspondientes a estos vectores de soporte.

ébano1
fuente