Loading [MathJax]/jax/element/mml/optable/GeneralPunctuation.js

20 votos

Cálculo del límite de decisión de un modelo SVM lineal

Dados los vectores de soporte de una SVM lineal, ¿cómo puedo calcular la ecuación de la frontera de decisión?

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.

30voto

DavLink Puntos 101

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

4 votos

Precioso, exactamente lo que buscaba. Las dos líneas: w <- colSums(coef(svp)[[1]] * x[unlist(alphaindex(svp)),]) b <- b(svp) fueron un regalo del cielo. Gracias.

0 votos

@chi: puede ser interesante echar un vistazo a mi respuesta a "cómo calcular el límite de decisión de una SVM": stats.stackexchange.com/questions/164935/

4voto

Evan M. Puntos 231

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

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X