Computando o limite de decisão de um modelo SVM linear

19

Dados os vetores de suporte de um SVM linear, como posso calcular a equação do limite de decisão?

dshin
fonte
w = soma sobre i (ai ti xi). você terá que minimizar o lagrangiano para encontrar os valores dos multiplicadores, ai. Gostaria de saber como você conseguiu os vetores de suporte? o mesmo processo também deve fornecer o valor de ai's.
euphoria83
2
Ainda não posso comentar, mas acho que na resposta aceita a linha de decisão e as margens não devem 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), uma vez que abline leva entrada como interceptação e inclinação, respectivamente? wx-b = 0, o que implica: w1.x1 + w2.x2 = b, o que implica (já que x2 é o "y") abline (b / w [2], -w [1] / w [2]) Desculpe isso é um post antigo, mas pensei em perguntar.
Nepse Tyson
Bem-vindo ao site, @Nepze Tyson. Esta não é uma resposta para a pergunta do OP. Por favor, use apenas o campo "Sua resposta" para fornecer respostas. Se você tiver sua própria pergunta, clique [ASK QUESTION]no topo da página e faça a pergunta lá, podemos ajudá-lo adequadamente. Como você é novato aqui, leia a nossa página de tour , que contém informações para novos usuários.
gung - Restabelece Monica
@Nepze Obrigado pelo seu comentário perspicaz e pelo tempo e atenção que você tomou para fazê-lo. Espero que isso leve a uma resposta aprimorada aqui. Também gostaria de me juntar ao Kung dando as boas-vindas ao nosso site.
whuber

Respostas:

29

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 0__β__=1β0 02/__β__

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.

texto alternativo

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á:

texto alternativo

chl
fonte
4
Bonito, exatamente o que eu estava procurando. As duas linhas: w <- colSums (coef (svp) [[1]] * x [unlist (alphaindex (svp)),]) b <- b (svp) foram uma dádiva de Deus. Obrigado!
amigos estão dizendo sobre dshin
@chi: pode ser interessante dar uma olhada na minha resposta para "como calcular o limite de decisão de um SVM": stats.stackexchange.com/questions/164935/…
4

É uma combinação linear dos vetores de suporte em que os coeficientes são dados pelos multiplicadores de Lagrange correspondentes a esses vetores de suporte.

ebony1
fonte