Dado um conjunto de pontos no espaço bidimensional, como uma decisão de projeto pode funcionar para o SVM?

10

Alguém pode me explicar como projetar uma função de decisão SVM? Ou aponte-me para um recurso que discuta um exemplo concreto.

EDITAR

Para o exemplo abaixo, posso ver que a equação X2=1.5 separa as classes com margem máxima. Mas como ajusto os pesos e escrevo equações para hiperplanos da seguinte forma.

H1:w0+w1x1+w2x21forYi=+1H2:w0+w1x1+w2x21forYi=1.

insira a descrição da imagem aqui

Estou tentando acertar a teoria subjacente no espaço 2D (como é mais fácil de visualizar) antes de pensar em dimensões mais altas.

Eu elaborei a solução para isso. Alguém pode confirmar se isso está correto?

o vetor de peso é (0, -2) e W_0 é 3

H1:3+0x12x21forYi=+1H2:3+0x12x21forYi=1.
naresh
fonte
Há uma ilustração com R aqui , mas acho que sua pergunta é mais sobre o aspecto algorítmico. Nesse caso, ajudaria se você pudesse adicionar um pouco mais de detalhes sobre o aplicativo pretendido ou o recurso disponível.
chl
@chl Atualizei a pergunta com detalhes #
naresh 17/11/2012

Respostas:

12

Existem pelo menos duas maneiras de motivar os SVMs, mas seguirei a rota mais simples aqui.

Agora, esqueça tudo o que sabe sobre o SVM no momento e concentre-se apenas no problema em questão. Você recebe um conjunto de pontos junto com alguns rótulos ( y i ) que são de { 1 , - 1 } . Agora, estamos tentando encontrar uma linha em 2D tal que todos os pontos com etiqueta 1 queda de um lado da linha e todos os pontos com etiqueta - 1 queda do outro lado.D={(x1i,x2i,yi)}yi{1,1}11

Antes de tudo, perceba que é uma linha em 2D e w 0 + w 1 x 1 + w 2 x 2 > 0 representa "um lado" da linha e w 0 + w 1 x 1 + w 2 x 2 < 0 representa o "outro lado" da linha.w0+w1x1+w2x2=0w0+w1x1+w2x2>0w0+w1x1+w2x2<0

Do exposto, podemos concluir que queremos um vetor tal que, w 0 + w 1 x i 1 + w 2 x i 20 para todos os pontos x i com y i = 1 e w 0 + w 1 x i 1 + w 2 x i 2 < 0[w0,w1,w2]w0+w1x1i+w2x2i0xiyi=1w0+w1x1i+w2x2i<0para todos os pontos com y i = - 1 [1].xiyi=1

Vamos supor que essa linha realmente exista, então eu posso definir um classificador da seguinte maneira,

min|w0|+|w1|+|w2|subject to:w0+w1x1i+w2x2i0,xi with yi=1w0+w1x1i+w2x2i<0,xi with yi=1

Eu usei uma função objetivo arbitrária acima, na verdade não nos importamos no momento em que função objetivo seja usada. Nós apenas queremos um que satisfaça nossas restrições. Como assumimos que existe uma linha de forma que possamos separar as duas classes com essa linha, encontraremos uma solução para o problema de otimização acima.w

O acima não é SVM, mas fornecerá um classificador :-). No entanto, esse classificador pode não ser muito bom. Mas como você define um bom classificador? Um bom classificador é geralmente aquele que se sai bem no conjunto de testes. Idealmente, você examinaria todos os possíveis que separam seus dados de treinamento e veria qual deles se saiu bem nos dados de teste. No entanto, existem infinitos , então isso é totalmente inútil. Em vez disso, consideraremos algumas heurísticas para definir um bom classificador. Uma heurística é que a linha que separa os dados estará suficientemente longe de todos os pontos (ou seja, sempre há espaço ou margem entre os pontos e a linha). O melhor classificador dentre esses é o de margem máxima. É isso que é usado nos SVMs.www

Em vez de insistir que para todos os pontos com e para todos os pontos com , se insistimos que para todos os pontos com e para todos os pontos com , então estamos realmente insistindo para que os pontos estejam longe da linha. A margem geométrica correspondente a esse requisito é .x i y i = 1 w 0 + w 1 x i 1 + w 2 x i 2 < 0 x i y i = - 1 w 0 + w 1 x i 1 + w 2 x i 21w0+w1x1i+w2x2i0xiyi=1w0+w1x1i+w2x2i<0xiyi=1w0+w1x1i+w2x2i1y i = 1 w 0 + w 1 x i 1 + w 2 x i 2- 1 x i y i = - 1 1xiyi=1w0+w1x1i+w2x2i1xiyi=11w2

Portanto, obtemos o seguinte problema de otimização, Uma forma ligeiramente sucinta de escrever é: Essa é basicamente a formulação básica do SVM. Eu pulei muita discussão por questões de brevidade. Espero que ainda tenha conseguido a maior parte da idéia.

max1w2subject to:w0+w1x1i+w2x2i1,xi with yi=1w0+w1x1i+w2x2i1,xi with yi=1
minw2subject to:yi(w0+w1x1i+w2x2i)1,i

Script CVX para resolver o problema de exemplo:

A = [1 2 1; 3 2 1; 2 3 1; 3 3 1; 1 1 1; 2 0 1; 2 1 1; 3 1 1];
b = ones(8, 1);
y = [-1; -1; -1; -1; 1; 1; 1; 1];
Y = repmat(y, 1, 3);
cvx_begin
variable w(3)
minimize norm(w)
subject to
(Y.*A)*w >= b
cvx_end

Adenda - Margem Geométrica

Acima, já solicitamos que modo que ou geralmente . O LHS aqui que você vê é chamado de margem funcional; portanto, o que solicitamos aqui é que a margem funcional seja . Agora, tentaremos calcular a margem geométrica, considerando esse requisito de margem funcional.wyi(w0+w1x1+w2x2)1yi(w0+wTx)11

O que é margem geométrica? Margem geométrica é a menor distância entre pontos nos exemplos positivos e pontos nos exemplos negativos. Agora, os pontos que possuem a menor distância, conforme exigido acima, podem ter uma margem funcional maior que igual a 1. No entanto, vamos considerar o caso extremo, quando estiverem mais próximos do hiperplano, a margem funcional para os pontos mais curtos é exatamente igual para 1. Seja o ponto no exemplo positivo, seja um ponto tal que e seja o ponto no exemplo negativo, seja um ponto tal que . Agora, a distância entre e será a mais curta quandox+wTx++w0=1xwTx+w0=1x+xx+x é perpendicular ao hiperplano.

Agora, com todas as informações acima, tentaremos encontrar que é a margem geométrica. x+x2

wTx++w0=1
wTx+w0=1
wT(x+x)=2
|wT(x+x)|=2
x + - x - 2 = 2
w2x+x2=2
x+x2=2w2

[1] Não importa qual lado você escolhe para e . Você só precisa permanecer consistente com o que escolher.- 111

TenaliRaman
fonte
11
@ Naresh Yeap, resolver isso é em CVX me deu exatamente a mesma solução que você tem . w=[0,2,3]
TenaliRaman
11
@entropy obrigado Corrigi o erro de digitação. Vou adicionar a explicação da margem geométrica.
TenaliRaman
11
@entropy Atualizei a resposta com a explicação da margem geométrica.
TenaliRaman
11
@entropy é um hiperplano passando pela origem. Para cobrir o espaço de todas as equações lineares, você precisa do termo de viés. Pense nos pontos que residem em 2D e digamos que você está tentando encontrar uma linha que os separa. No entanto, todos esses pontos estão no primeiro quadrante. Agora, é possível organizar esses pontos de modo que sejam separáveis, mas não por qualquer linha que passe pela origem. No entanto, uma linha com um viés adequado pode fazê-lo. wTx
TenaliRaman
11
@entropy Dito o exposto acima, você já deve ter percebido que, se você girar e mudar os pontos adequadamente, mesmo uma linha que passa pela origem deve separar as classes. No entanto, geralmente não é fácil encontrar essa rotação e mudança certas, comparado a apenas aprender o termo de viés.
TenaliRaman