avertissement et validation croisée de libsvm "atteignant le nombre maximal d'itérations"


20

J'utilise libsvm en mode C-SVC avec un noyau polynomial de degré 2 et je dois former plusieurs SVM. Chaque ensemble d'entraînement a 10 fonctionnalités et 5000 vecteurs. Pendant la formation, je reçois cet avertissement pour la plupart des SVM que je forme:

WARNING: reaching max number of iterations
optimization finished, #iter = 10000000

Quelqu'un pourrait-il expliquer ce que cet avertissement implique et, peut-être, comment l'éviter?

Je souhaite également appliquer la validation croisée pour mes modèles afin de déterminer les meilleurs choix pour le gamma et le C (régularisation). Mon plan consiste à essayer toutes les combinaisons de ces 10 valeurs: 0,00001, 0,0001, 0,001, 0,01, 0,1, 1, 10, 100, 1000, 10000 pour les deux paramètres et voir quelle combinaison produit la meilleure précision lors de la validation croisée. Est-ce assez? Dois-je utiliser plus de valeurs dans cet intervalle ou dois-je choisir un intervalle plus large?


Essayez le mode NU_SVC, cela devrait résoudre votre problème.
Hosein Bitaraf

Réponses:


20

Cet avertissement signifie que la routine itérative utilisée par LIBSVM pour résoudre le problème d'optimisation quadratique afin de trouver l'hyperplan de marge maximale (c'est-à-dire les paramètres et ) séparant vos données a atteint le nombre maximal d'itérations et devra s'arrêter, tandis que l'approximation actuelle pour peut être encore amélioré (c'est-à-dire que peut être modifié pour rendre la valeur de la fonction objectif plus extrême). En bref, cela signifie que le LIBSVM pense qu'il n'a pas réussi à trouver l'hyperplan de marge maximale, qui peut ou non être vrai.wbww

Il y a plusieurs raisons pour lesquelles cela peut arriver, je vous suggère de faire ce qui suit:

  • Normalisez vos données.
  • Assurez-vous que vos cours sont plus ou moins équilibrés (ont une taille similaire). Si ce n'est pas le cas, utilisez le paramètre -w pour leur attribuer des poids différents.
  • Essayez différents et . Le noyau polynomial dans LIBSVM a également le paramètre 'coef0', car le noyau est Cγ
    γuv+coeff0 degré

C'est une bonne idée de rechercher le optimal sur une échelle logarithmique, comme vous le faites. Je pense que pour les données normalisées, la plage de recherche de que vous avez suggérée devrait être OK. Une vérification utile: la précision du classificateur ne devrait pas beaucoup changer aux frontières de cette plage et entre deux valeurs de votre ensemble. Si c'est le cas, étendez la plage ou ajoutez des valeurs intermédiaires.CC

Notez que la distribution LIBSVM pour Windows doit contenir un script Python appelé grid.py, qui peut faire la sélection de paramètres pour vous (en fonction de la validation croisée et des plages de recherche spécifiées). Il peut également produire des tracés de contour pour la précision de SVM. Cet outil peut être très utile.

La question suivante sur StackOverflow et ses questions connexes pourrait également aider: libsvm Shrinking Heuristics


Merci pour l'explication détaillée. Cela clarifie définitivement le mystère. J'ai posé à peu près la même question sur SO (le lien que vous avez fourni), mais la réponse que j'ai reçue était principalement axée sur la réduction de l'heuristique.
Mihai Todor
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.