Ao usar SVMs, por que preciso dimensionar os recursos?


9

De acordo com a documentação do objeto StandardScaler no scikit-learn:

Por exemplo, muitos elementos usados ​​na função objetivo de um algoritmo de aprendizado (como o kernel RBF do Support Vector Machines ou os regularizadores L1 e L2 dos modelos lineares) assumem que todos os recursos estão centralizados em torno de 0 e têm variação na mesma ordem. Se um recurso tem uma variação que é ordens de magnitude maior que os outros, ele pode dominar a função objetivo e tornar o estimador incapaz de aprender com outros recursos corretamente, conforme o esperado.

Eu deveria escalar meus recursos antes da classificação. Existe alguma maneira fácil de mostrar por que devo fazer isso? Referências a artigos científicos seriam ainda melhores. Eu já encontrei um, mas provavelmente existem muitos outros.

Respostas:


16

Todos os métodos do kernel são baseados na distância. A função do kernel RBF é (usando para simplicidade).κ(u,v)=exp(uv2)γ=1

Dados três vetores de recursos:

x1=[1000,1,2],x2=[900,1,2],x3=[1050,10,20].

então , ou seja, é supostamente mais semelhante a depois a .κ(x1,x2)=exp(10000)κ(x1,x3)=exp(2905)x1x3x2

As diferenças relativas entre e: x1

x2[0.1,0,0],x3[0.05,10,10].

Portanto, sem escalar, concluímos que é mais semelhante a que a , apesar das diferenças relativas por recurso entre e são muito maiores que os de e .x1x3x2x1x3x1x2

Em outras palavras, se você não dimensionar todos os recursos para intervalos comparáveis, os recursos com o maior intervalo serão completamente dominados no cálculo da matriz do kernel.

Você pode encontrar exemplos simples para ilustrar isso no documento a seguir: Um guia prático de suporte à classificação vetorial (Seção 2.2).


você também pode discutir a regularização: a escala dos pesos depende da escala dos insumos ...
seanv507 27/05

O efeito da regularização é que diferentes escalas implicam diferentes ideais , o que é um tanto ortogonal a esse problema em particular. C
Marc Claesen

2
Mas pode ser que a proximidade de uma dimensão seja mais importante. Portanto, o objetivo não é realmente ter a mesma variação em todos os recursos, mas escalá-los de forma que as distâncias ao longo de cada recurso tenham a mesma importância na tarefa.
Isarandi 27/05

@ Marc Claesen, se suas variáveis ​​são de diferentes ordens de magnitude, então seus pesos também serão de diferentes ordens de magnitude, e a norma l2 se concentrará nas entradas que apresentam pequena variação e pesos correspondentes. Em outras palavras, a regularização da norma de peso garante que insumos 'pequenos' tenham pequenos efeitos. Isso só faz sentido se você padronizou 'small' (entre suas entradas), por exemplo, normalizando suas variáveis
seanv507

11
@ seanv507 que se aplica apenas ao SVM linear.
Marc Claesen

0

Depende do kernel que você está usando. De longe, o mais comumente usado (além do linear) é o núcleo gaussiano, que tem a forma

f=exp(||x1x2||22σ2)

Um SVM pega essa função e a usa para comparar a semelhança de um ponto ( ) com qualquer outro ponto no conjunto de treinamento, somando as diferenças como:x1

(x1l1)2+(x2l2)2...+(xnln)2

onde é seu exemplo e os valores de são os pontos de referência.xl

Se o recurso varia de 0 a 50.000 enquanto o recurso varia de 0 a 0,01, é possível ver que dominará essa soma enquanto praticamente não terá impacto. Por esse motivo, é necessário escalar os recursos antes de aplicar o kernal.x1x2x1x2

Se você quiser saber mais, recomendo o módulo 12 (Support Vector Machines) do curso on-line de Stanford em aprendizado de máquina no Coursera (gratuito e disponível a qualquer momento): https://www.coursera.org/course/ml

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.