A resposta de Ryan Zotti explica a motivação por trás da maximização dos limites de decisão, a resposta de carlosdc fornece algumas semelhanças e diferenças com relação a outros classificadores. Nesta resposta, darei uma breve visão geral matemática de como os SVMs são treinados e usados.
Notações
A seguir, escalares são indicados com letras minúsculas em itálico (por exemplo, ), vetores com letras minúsculas em negrito (por exemplo, ) e matrizes com letras maiúsculas em itálico (por exemplo, ) é a transposição de e .y,bw,xWwTw∥w∥=wTw
Deixei:
- x é um vetor de recurso (ou seja, a entrada do SVM). , em que é a dimensão do vetor de recurso.x∈Rnn
- y seja a classe (ou seja, a saída do SVM). , ou seja, a tarefa de classificação é binária.y∈{−1,1}
- w e são os parâmetros do SVM: precisamos aprendê-las usando o conjunto de treinamento.b
- (x(i),y(i)) é a amostra no conjunto de dados. Vamos supor que temos amostras no conjunto de treinamento.ithN
Com , pode-se representar os limites de decisão do SVM da seguinte maneira:n=2
A classe é determinada da seguinte forma:y
y(i)={−11 if wTx(i)+b≤−1 if wTx(i)+b≥1
que pode ser escrito de forma mais concisa como .y(i)(wTx(i)+b)≥1
Objetivo
O SVM visa atender a dois requisitos:
O SVM deve maximizar a distância entre os dois limites de decisão. Matematicamente, isso significa que queremos maximizar a distância entre o hiperplano definido por e o hiperplano definido por . Essa distância é igual a . Isso significa que queremos resolver . Equivalentemente, queremos
.wTx+b=−1wTx+b=12∥w∥maxw2∥w∥minw∥w∥2
O SVM também deve classificar corretamente tudo , o que significax(i)y(i)(wTx(i)+b)≥1,∀i∈{1,…,N}
O que nos leva ao seguinte problema de otimização quadrática:
minw,bs.t.∥w∥2,y(i)(wTx(i)+b)≥1∀i∈{1,…,N}
Esse é o SVM de margem rígida , pois esse problema de otimização quadrática admite uma solução se os dados forem linearmente separáveis.
Pode-se relaxar as restrições introduzindo as chamadas variáveis de folga . Observe que cada amostra do conjunto de treinamento tem sua própria variável de folga. Isso nos dá o seguinte problema de otimização quadrática:ξ(i)
minw,bs.t.∥w∥2+C∑i=1Nξ(i),y(i)(wTx(i)+b)≥1−ξ(i),ξ(i)≥0,∀i∈{1,…,N}∀i∈{1,…,N}
Este é o SVM de margem flexível . é um hiperparâmetro chamado penalidade do termo de erro . ( Qual é a influência de C nos SVMs com kernel linear? E Qual intervalo de pesquisa para determinar os parâmetros ideais do SVM? ).C
Pode-se adicionar ainda mais flexibilidade, introduzindo uma função que mapeia o espaço original do recurso para um espaço dimensional mais alto. Isso permite limites de decisão não lineares. O problema de otimização quadrática se torna:ϕ
minw,bs.t.∥w∥2+C∑i=1Nξ(i),y(i)(wTϕ(x(i))+b)≥1−ξ(i),ξ(i)≥0,∀i∈{1,…,N}∀i∈{1,…,N}
Otimização
O problema de otimização quadrática pode ser transformado em outro problema de otimização chamado problema dual Lagrangiano (o problema anterior é chamado de primal ):
maxαs.t.minw,b∥w∥2+C∑i=1Nα(i)(1−wTϕ(x(i))+b)),0≤α(i)≤C,∀i∈{1,…,N}
Esse problema de otimização pode ser simplificado (configurando alguns gradientes para ) para:0
maxαs.t.∑i=1Nα(i)−∑i=1N∑j=1N(y(i)α(i)ϕ(x(i))Tϕ(x(j))y(j)α(j)),0≤α(i)≤C,∀i∈{1,…,N}
w não aparece como (conforme declarado pelo teorema do representador ).w=∑Ni=1α(i)y(i)ϕ(x(i))
Portanto, aprendemos o usando do conjunto de treinamento.α(i)(x(i),y(i))
(FYI: Por que se preocupar com o problema duplo ao ajustar o SVM? Resposta curta: computação mais rápida + permite usar o truque do kernel, embora existam bons métodos para treinar o SVM no primal, por exemplo, consulte {1})
Fazendo uma previsão
Depois que o é aprendido, é possível prever a classe de uma nova amostra com o vetor de recursos seguinte maneira:α(i)xtest
ytest=sign(wTϕ(xtest)+b)=sign(∑i=1Nα(i)y(i)ϕ(x(i))Tϕ(xtest)+b)
O somatório pode parecer avassalador, pois significa que é preciso somar todas as amostras de treinamento, mas a grande maioria de é (consulte Por que os Os multiplicadores de Lagrange são escassos para SVMs? ), Portanto, na prática, isso não é um problema. (observe que é possível construir casos especiais em que todos ) se for um vetor de suporte . A ilustração acima possui 3 vetores de suporte.∑Ni=1α(i)0α(i)>0α(i)=0x(i)
Truque do kernel
Pode-se observar que o problema de otimização usa apenas no produto interno . A função que mapeia para o produto interno é chamado de um núcleo , aka função kernel, muitas vezes denotado por .ϕ(x(i))ϕ(x(i))Tϕ(x(j))(x(i),x(j))ϕ(x(i))Tϕ(x(j))k
Pode-se escolher para que o produto interno seja eficiente para a computação. Isso permite usar um espaço de recurso potencialmente alto a um baixo custo computacional. Isso é chamado de truque do kernel . Para uma função do kernel ser válida , ou seja, utilizável com o truque do kernel, ela deve satisfazer duas propriedades principais . Existem muitas funções do kernel para você escolher . Como uma observação lateral, o truque do kernel pode ser aplicado a outros modelos de aprendizado de máquina ; nesse caso, eles são referidos como kernelized .k
Indo além
Alguns QAs interessantes em SVMs:
Outros links:
Referências: