The Elements of Statistical Learning , de Hastie et al., Possui um capítulo completo sobre classificadores de vetores de suporte e SVMs (no seu caso, inicie a página 418 na 2ª edição). Outro bom tutorial é o Support Vector Machines in R , de David Meyer.
A menos que eu entenda mal sua pergunta, o limite de decisão (ou hiperplano) é definido por (com e o termo de interceptação), ou como @ebony disse uma combinação linear dos vetores de suporte. A margem é então, seguindo Hastie et al. notações.xTβ+ β0 0= 0∥ β∥ = 1β0 02 / ∥ p∥
A partir da ajuda on-line de ksvm()
no kernlab pacote R, mas ver também kernlab - um pacote de S4 para métodos do kernel em R , aqui está um exemplo de brinquedo:
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)
Observe que, por uma questão de clareza, não consideramos amostras de treinamento e teste. Os resultados são mostrados abaixo, onde o sombreamento das cores ajuda a visualizar os valores de decisão ajustados; valores em torno de 0 estão no limite de decisão.
A chamada attributes(svp)
fornece atributos que você pode acessar, por exemplo
alpha(svp) # support vectors whose indices may be
# found with alphaindex(svp)
b(svp) # (negative) intercept
Portanto, para exibir o limite de decisão, com sua margem correspondente, vamos tentar o seguinte (no espaço redimensionado), que é amplamente inspirado em um tutorial sobre SVM feito há algum tempo 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)
E aqui está: