libsvm "Maximale Anzahl von Iterationen erreicht" Warnung und Kreuzvalidierung

20

Ich verwende libsvm im C-SVC-Modus mit einem Polynomkern der Stufe 2 und muss mehrere SVMs trainieren. Jedes Trainingsset enthält 10 Features und 5000 Vektoren. Während des Trainings erhalte ich diese Warnung für die meisten SVMs, die ich trainiere:

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

Könnte jemand erklären, was diese Warnung impliziert und wie sie möglicherweise vermieden werden kann?

Ich möchte auch eine Kreuzvalidierung für meine Modelle anwenden, um die besten Optionen für Gamma und C (Regularisierung) zu ermitteln. Mein Plan ist es, einfach jede Kombination dieser 10 Werte auszuprobieren: 0,00001, 0,0001, 0,001, 0,01, 0,1, 1, 10, 100, 1000, 10000 für beide Parameter und zu sehen, welche Kombination die beste Genauigkeit bei der Kreuzvalidierung ergibt. Ist das genug? Soll ich in diesem Intervall mehr Werte verwenden oder ein größeres Intervall wählen?

Mihai Todor
quelle
Versuchen Sie den NU_SVC-Modus, er sollte Ihr Problem lösen.
Hosein Bitaraf

Antworten:

20

Diese Warnung bedeutet, dass die von LIBSVM zur Lösung des quadratischen Optimierungsproblems verwendete iterative Routine, um die Hyperebene mit maximalem Rand (dh die Parameter und ) zu finden, die Ihre Daten trennt, die maximale Anzahl von Iterationen erreicht hat und angehalten werden muss, während die aktuelle Approximation für kann weiter verbessert werden (dh kann geändert werden, um den Wert der Zielfunktion extremer zu machen). Kurz gesagt bedeutet dies, dass die LIBSVM der Meinung ist, dass sie die Maximum-Margin-Hyperebene nicht gefunden hat, was möglicherweise zutrifft oder nicht.b w wwbww

Es gibt viele Gründe, warum dies passieren kann. Ich empfehle Ihnen Folgendes:

  • Normalisieren Sie Ihre Daten.
  • Stellen Sie sicher, dass Ihre Klassen mehr oder weniger ausgeglichen sind (eine ähnliche Größe haben). Ist dies nicht der Fall, weisen Sie ihnen mit dem Parameter -w unterschiedliche Gewichte zu.
  • Probieren Sie ein anderes und . Der Polynomkern in LIBSVM hat auch den Parameter 'coef0', da der Kern γ γ u v + Koeffizient  Grad 0Cγ
    γuv+coeff0 degree

Es ist eine gute Idee, optimales auf einer logarithmischen Skala zu suchen , wie Sie es tun. Ich denke, für normalisierte Daten sollte der von Ihnen vorgeschlagene Suchbereich für in Ordnung sein. Eine nützliche Überprüfung: Die Genauigkeit des Klassifikators sollte sich an den Grenzen dieses Bereichs und zwischen zwei Werten Ihrer Menge nicht wesentlich ändern. Wenn dies der Fall ist, erweitern Sie den Bereich oder fügen Sie Zwischenwerte hinzu.CCC

Beachten Sie, dass LIBSVM Distributive für Windows ein Python-Skript mit dem Namen grid.py enthalten sollte, mit dem Sie Parameter auswählen können (basierend auf der Kreuzvalidierung und den angegebenen Suchbereichen). Es können auch Konturdiagramme für die Genauigkeit von SVM erstellt werden. Dieses Tool kann sehr hilfreich sein.

Die folgende Frage zu StackOverflow und den zugehörigen Fragen könnte ebenfalls hilfreich sein: libsvm Shrinking Heuristics

Löwe
quelle
Danke für die ausführliche Erklärung. Es klärt definitiv das Rätsel auf. Ich habe ungefähr dieselbe Frage zu SO gestellt (den Link, den Sie angegeben haben), aber die Antwort, die ich dort erhielt, konzentrierte sich hauptsächlich auf die abnehmende Heuristik.
Mihai Todor