Seleção de parâmetros SVM

9

Existem melhores métodos alternativos para escolher C e Gamma que produzem melhor desempenho no treinamento?

John
fonte

Respostas:

5

A pesquisa em grade é lenta, pois gasta muito tempo investigando configurações de hiperparâmetros que não estão nem perto do ideal. Uma solução melhor é o algoritmo simplex Nelder-Mead , que não requer cálculo de informações de gradiente e é simples de implementar (deve haver informações suficientes na página da Wikipedia). Também pode haver algum código java na caixa de ferramentas Weka , no entanto, trabalho no MATLAB e não olhei para o Weka com nenhum detalhe.

O SMO é um algoritmo para encontrar os parâmetros do modelo, em vez dos hiperparâmetros.

Dikran Marsupial
fonte
Você poderia fornecer sua implementação do matlab?
Zach
11
Há um aqui theoval.cmp.uea.ac.uk/matlab/#optim, mas se você já possui a caixa de ferramentas de otimização, o fminsearch também é uma implementação do método NRC de Meleader IIRC.
Dikran Marsupial
5

O método simplex Nelder-Mead pode envolver tantas avaliações de funções quanto uma simples pesquisa em grade. Geralmente, a superfície do erro é suave o suficiente perto dos valores ótimos dos parâmetros que uma pesquisa de grade grossa seguida por uma mais fina em uma região menor deve ser suficiente.

Se você estiver interessado na otimização baseada em gradiente de C e gama, existem métodos como otimizar os limites da margem do raio ou otimizar a taxa de erro em um conjunto de validação. O cálculo do gradiente da função objetivo envolve algo como um trem SVM, mas uma descida simples do gradiente pode envolver apenas algumas dezenas de iterações. (Consulte http://olivier.chapelle.cc/ams/ para obter um artigo e uma implementação do Matlab.)

Innuo
fonte
Na minha experiência, o nelder-hidromel é geralmente mais rápido do que a pesquisa em grade e a descida do gradiente é apenas um pouco mais rápida, enquanto leva menos iterações, o custo de calcular o gradiente é alto. Portanto, se você tem uma implementação que fornece descida gradiente, use-a, mas o Nelder-Mead provavelmente não ficará muito atrás. Obviamente, assim que você tiver mais de dois hiperparâmetros para ajustar a pesquisa na grade, imediatamente se tornará o método mais lento. Seria interessante ver um estudo das eficiências comparativas de cada método.
Dikran Marsupial
Você está certo que, se o número de parâmetros for superior a alguns, a pesquisa na grade não será viável. Mas o mesmo se aplica a Nelder-Mead, porque o tamanho do simplex é determinado pela dimensionalidade.
Innuo
somente na mesma extensão que na descida do gradiente, adicionar uma dimensão extra ao problema adiciona apenas um ponto extra ao simplex; assim, como a descida do gradiente, ele é dimensionado aproximadamente linearmente no número de hiperparâmetros. Eu o usei com problemas com mais de 40 hiperparâmetros e é apenas um pouco mais lento que a descida do gradiente (você tende a se ajustar demais na seleção de modelos de qualquer maneira, embora com tantos hiperparâmetros).
Dikran Marsupial
0

Aqui está uma entrada no blog de Alex Smola relacionada à sua pergunta

Aqui está uma citação:

[...] escolha, digamos 1000 pares (x, x ') aleatoriamente do seu conjunto de dados, calcule a distância de todos esses pares e calcule a mediana, o quantil 0,1 e o 0,9. Agora escolha λ para ser o inverso de qualquer um desses três números. Com um pouco de validação cruzada, você descobrirá qual dos três é o melhor. Na maioria dos casos, você não precisará pesquisar mais.

carlosdc
fonte