El Elementos de aprendizaje estadístico de Hastie et al., tiene un capítulo completo sobre los clasificadores de vectores de soporte y los SVM (en su caso, empiece por la página 418 de la 2ª edición). Otro buen tutorial es Máquinas de vectores soporte en R por David Meyer.
A menos que haya entendido mal su pregunta, el límite de decisión (o hiperplano) está definido por xTβ+β0=0 (con ‖ y \beta_0 el término de intercepción), o como dijo @ebony una combinación lineal de los vectores de soporte. El margen es entonces 2/\|\beta\| siguiendo las anotaciones de Hastie et al.
Desde la ayuda en línea de ksvm()
en el kernlab R, pero véase también kernlab - Un paquete S4 para métodos kernel en R Aquí tienes 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 las muestras de entrenamiento y de prueba. Los resultados se muestran a continuación, donde el sombreado de color ayuda a visualizar los valores de decisión ajustados; los valores alrededor de 0 están en el límite de decisión.
![alt text]()
Llamando a attributes(svp)
le da atributos a los que puede acceder, por ejemplo
alpha(svp) # support vectors whose indices may be
# found with alphaindex(svp)
b(svp) # (negative) intercept
Así pues, para mostrar la frontera de decisión, con su correspondiente margen, probemos lo siguiente (en el espacio reescalado), que se inspira en gran medida en un tutorial sobre SVM realizado hace 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á:
![alt text]()
0 votos
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 debería darte también el valor de ai's.
2 votos
Todavía no puedo comentar nada, pero creo que en la respuesta aceptada la línea de decisión y los márgenes no deberían ser: 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 la entrada como intercepción y pendiente respectivamente? w.x-b=0 lo que implica: w1.x1+w2.x2=b lo que implica (ya que x2 es la "y") abline(b/w[2], -w[1]/w[2]) Lo siento, este es un post antiguo pero pensé en preguntar.
0 votos
Bienvenido al sitio, @Nepze Tyson. Esto no es una respuesta a la pregunta del OP. Por favor, utiliza sólo el campo "Tu respuesta" para dar respuestas. Si tienes tu propia pregunta, haz clic en el botón
[ASK QUESTION]
en la parte superior de la página y pregunte allí, entonces podremos ayudarle adecuadamente. Como eres nuevo aquí, tal vez quieras leer nuestro página de la gira que contiene información para los nuevos usuarios.0 votos
@Nepze Gracias por su perspicaz comentario y por el tiempo y la atención que ha dedicado a realizarlo. Espero que nos lleve a mejorar la respuesta aquí. También me gustaría unirme a gung para darte la bienvenida a nuestro sitio.
0 votos
@dshin: ver stats.stackexchange.com/questions/164935/