Como selecionar o kernel para SVM?

96

Ao usar o SVM, precisamos selecionar um kernel.

Gostaria de saber como selecionar um kernel. Algum critério na seleção do kernel?

xiaohan2012
fonte
1
qual é o tamanho do problema? (# variáveis, observações)?
user603
1
Estou apenas pedindo uma solução generalizada, não há problema em particular especificado
xiaohan2012

Respostas:

55

O kernel é efetivamente uma medida de similaridade, portanto, escolher um kernel de acordo com o conhecimento prévio de invariâncias, conforme sugerido por Robin (+1), é uma boa idéia.

Na falta de conhecimento especializado, o kernel da Função Base Radial cria um bom kernel padrão (depois de estabelecer, é um problema que requer um modelo não linear).

A escolha dos parâmetros do kernel e do kernel / regularização pode ser automatizada, otimizando uma seleção de modelo baseada em valdiação cruzada (ou use os limites da margem do raio ou da extensão). A coisa mais simples a fazer é minimizar um critério de seleção contínua de modelo usando o método simplex Nelder-Mead, que não requer cálculo de gradiente e funciona bem para números sensíveis de hiperparâmetros. Se você tiver mais do que alguns hiperparâmetros para ajustar, a seleção automatizada de modelos provavelmente resultará em um ajuste excessivo severo, devido à variação do critério de seleção de modelos. É possível usar a otimização baseada em gradiente, mas o ganho de desempenho geralmente não vale o esforço de codificá-lo).

A escolha automatizada de kernels e parâmetros de kernel / regularização é uma questão complicada, pois é muito fácil superestimar o critério de seleção de modelo (geralmente baseado em validação cruzada) e você pode acabar com um modelo pior do que o iniciado. A seleção automatizada de modelos também pode influenciar a avaliação de desempenho. Portanto, verifique se a avaliação de desempenho avalia todo o processo de ajuste do modelo (treinamento e seleção de modelos). Para obter detalhes, consulte

GC Cawley e NLC Talbot, Prevenindo o ajuste excessivo na seleção de modelos via regularização bayesiana dos hiperparâmetros, Journal of Machine Learning Research, volume 8, páginas 841-861, abril de 2007. (pdf)

e

GC Cawley e NLC Talbot, excesso de ajuste na seleção de modelos e viés de seleção subsequente na avaliação de desempenho, Journal of Machine Learning Research, vol. 11, pp. 2079-2107, julho de 2010. (pdf)

Dikran Marsupial
fonte
1
Entendo como a base radial é uma medida de similaridade, já que é quase 0 para vetores distantes um do outro e atinge o máximo em vetores idênticos. No entanto, não vejo como essa ideia se aplica ao algoritmo linear (usando o produto escalar como um kernel). Como podemos interpretar o produto escalar como uma medida de similaridade?
Bananin 19/03
1
@Bananin o produto escalar pode ser escrito como o produto da magnitude dos dois vetores vezes o cosseno do ângulo entre eles, então você pode pensar nisso como medir a semelhança em termos da direção dos vetores (mas obviamente também depende em suas magnitudes)
Dikran Marsupial 19/03
35

Se você não tem certeza do que seria melhor, pode usar técnicas automáticas de seleção (por exemplo, validação cruzada, ...). Nesse caso, você pode até usar uma combinação de classificadores (se o seu problema for a classificação) obtidos com kernel diferente.

No entanto , a "vantagem" de trabalhar com um kernel é que você altera a geometria "euclidiana" usual para que ela se ajuste ao seu próprio problema. Além disso, você deve realmente tentar entender qual é o interesse de um kernel para o seu problema, o que é particular na geometria do seu problema . Isso pode incluir:

  • Invariância : se houver uma família de transformações que não mudam fundamentalmente o seu problema, o kernel deve refletir isso. A invariância por rotação está contida no kernel gaussiano, mas você pode pensar em muitas outras coisas: tradução, homotetia, qualquer representação de grupo, ...
  • O que é um bom separador? se você tem uma idéia do que é um bom separador (isto é, uma boa regra de classificação) em seu problema de classificação, isso deve ser incluído na escolha do kernel. Lembre-se de que o SVM fornecerá classificadores do formulário

f^(x)=i=1nλiK(x,xi)

Se você souber que um separador linear seria bom, poderá usar o Kernel que fornece funções afins (por exemplo, ). Se você acha que limites suaves, no espírito do KNN suave, seriam melhores, então você pode usar um kernel gaussiano ...K(x,xi)=x,Axi+c

Robin Girard
fonte
Na sua resposta, você mencionou que "a" vantagem "de trabalhar com um kernel é que você altera a geometria" euclidiana "usual para que ela se ajuste ao seu próprio problema. Além disso, você deve realmente tentar entender qual é o interesse de um kernel para o seu problema, o que é particular na geometria do seu problema. " Você pode dar algumas referências para começar. Obrigado.
Raihana 12/12
12

Eu sempre sinto que qualquer seleção de hiper parâmetros para SVMs é feita via validação cruzada em combinação com a pesquisa em grade.

bayerj
fonte
2
Eu tenho o mesmo sentimento
xiaohan2012
2
Como a pesquisa em grade é uma má idéia, você gasta muito tempo pesquisando em áreas onde o desempenho é ruim. Use algoritmos de otimização sem gradiente, como o método simplex Nelder-Mead, que é muito mais eficiente na prática (por exemplo, fminsearch () no MATLAB).
Dikran Marsupial
Não, use modelos gráficos ou processos gaussianos para otimização global em combinação com as informações esperadas. (Veja 'Algoritmos para otimização de parâmetros hiper', Bergstra et al, no prelo NIPS)
bayerj
3

Em geral, o kernel do RBF é uma primeira opção razoável. Além disso, o kernel linear é um caso especial do RBF. Em particular, quando o número de recursos é muito grande, pode-se usar apenas o kernel linear.

boyxiaolong
fonte
2
Depende se seus dados são linearmente separáveis ​​ou não, e não quantas dimensões você possui. Quando o número de recursos é muito grande, (novamente dependendo dos dados), você pode aplicar a redução de dimensionalidade primeiro, PCA ou LDA (variantes do kernel lineares ou não lineares)