Sélection des paramètres SVM

9

Existe-t-il de meilleures méthodes alternatives pour choisir C et Gamma qui donnent de meilleures performances d'entraînement?

John
la source

Réponses:

5

La recherche dans la grille est lente car elle passe beaucoup de temps à étudier les réglages d'hyper-paramètres qui sont loin d'être optimaux. Une meilleure solution est l' algorithme simplex de Nelder-Mead , qui ne nécessite pas de calcul des informations de gradient et est simple à mettre en œuvre (il devrait y avoir suffisamment d'informations sur la page Wikipedia). Il peut également y avoir du code java dans la boîte à outils Weka , mais je travaille dans MATLAB et je n'ai pas examiné Weka en détail.

SMO est un algorithme pour trouver les paramètres du modèle, plutôt que les hyper-paramètres.

Dikran Marsupial
la source
Pourriez-vous fournir votre implémentation matlab?
Zach
1
Il y en a une ici theoval.cmp.uea.ac.uk/matlab/#optim mais si vous avez déjà la boîte à outils d'optimisation, fminsearch est également une implémentation de la méthode Nelder-Mead IIRC.
Dikran Marsupial
5

La méthode simplex de Nelder-Mead peut impliquer autant d'évaluations de fonctions qu'une simple recherche dans la grille. Habituellement, la surface d'erreur est suffisamment lisse près des valeurs de paramètres optimales qu'une recherche de grille grossière suivie d'une recherche plus fine dans une région plus petite devrait suffire.

Si vous êtes intéressé par l'optimisation en gradient de C et gamma, il existe des méthodes telles que l'optimisation des limites de rayon-marge ou l'optimisation du taux d'erreur sur un ensemble de validation. Le calcul du gradient de la fonction objectif implique quelque chose comme un train SVM mais une simple descente de gradient ne peut impliquer que quelques dizaines d'itérations. (Regardez http://olivier.chapelle.cc/ams/ pour un article et une implémentation de Matlab.)

Innuo
la source
D'après mon expérience, le nelder-hydromel est généralement plus rapide que la recherche dans la grille et la descente du gradient n'est que légèrement plus rapide car il prend moins d'itérations, le coût du calcul du gradient est élevé. Donc, si vous avez une implémentation qui fournit une descente de gradient, utilisez-la, mais Nelder-Mead ne sera probablement pas loin derrière. Bien sûr, dès que vous avez plus de deux hyper-paramètres pour régler la recherche dans la grille, cela devient immédiatement la méthode la plus lente. Il serait intéressant de voir une étude des efficacités comparatives de chaque méthode.
Dikran Marsupial
Vous avez raison de dire que si le nombre de paramètres est supérieur à quelques, la recherche dans la grille n'est pas viable. Mais il en va de même pour Nelder-Mead, car la taille du simplexe est déterminée par la dimensionnalité.
Innuo
seulement dans la même mesure que pour la descente de gradient, l'ajout d'une dimension supplémentaire au problème n'ajoute qu'un point supplémentaire au simplex, donc comme la descente de gradient, il évolue à peu près linéairement dans le nombre d'hyper-paramètres. Je l'ai utilisé avec des problèmes avec plus de 40 hyper-paramètres et il n'est que légèrement plus lent que la descente de gradient (vous avez tendance à sur-ajuster la sélection de modèle dans les deux cas, mais avec autant d'hyper-paramètres).
Dikran Marsupial
0

Voici une entrée dans le blog d'Alex Smola liée à votre question

Voici une citation:

[...] choisissez, disons, 1000 paires (x, x ') au hasard dans votre jeu de données, calculez la distance de toutes ces paires et prenez la médiane, le 0,1 et le 0,9 quantile. Choisissez maintenant λ pour être l'inverse de l'un de ces trois nombres. Avec un peu de validation croisée, vous découvrirez lequel des trois est le meilleur. Dans la plupart des cas, vous n'aurez plus besoin de chercher.

carlosdc
la source