Ich habe einen kleinen, unausgeglichenen Datensatz (70 positiv, 30 negativ) und habe mit der Modellauswahl für SVM-Parameter unter Verwendung von BAC (ausgeglichene Genauigkeit) und AUC (Bereich unter der Kurve) herumgespielt. Ich habe verschiedene Klassengewichte für den C-Parameter in libSVM verwendet, um die unausgeglichenen Daten gemäß den hier angegebenen Anweisungen auszugleichen ( Training eines Entscheidungsbaums gegen unausgeglichene Daten ).
Es scheint, dass der k-fache Kreuzvalidierungsfehler sehr empfindlich auf die Art der Leistungsmessung reagiert. Es hat auch einen Fehler an sich, weil die Trainings- und Validierungssätze zufällig ausgewählt werden. Wenn ich beispielsweise BAC zweimal mit verschiedenen zufälligen Startwerten wiederhole, erhalte ich unterschiedliche Fehler und anschließend unterschiedliche optimale Parameterwerte. Wenn ich wiederholte BAC-Werte mittle, ergibt eine 1000-fache Mittelung andere optimale Parameterwerte als eine 10000-malige Mittelung. Darüber hinaus ergeben sich durch Ändern der Anzahl der Falten unterschiedliche optimale Parameterwerte.
Genauigkeitsmetriken für die Kreuzvalidierung sind möglicherweise zu optimistisch. Normalerweise ergibt alles, was über eine zweifache Kreuzvalidierung hinausgeht, eine 100% ige Genauigkeit. Auch die Fehlerrate wird aufgrund der geringen Stichprobengröße diskretisiert. Die Modellauswahl gibt mir oft die gleiche Fehlerrate über alle oder die meisten Parameterwerte hinweg.
Woher weiß ich beim Schreiben eines Berichts, dass eine Klassifizierung „gut“ oder „akzeptabel“ ist? Auf dem Gebiet scheint es so, als hätten wir keine allgemein akzeptierte Anpassungsgüte oder p-Wert-Schwelle. Da ich die Daten iterativ hinzufüge, möchte ich wissen, wann ich aufhören soll - was ist ein gutes N, bei dem sich das Modell nicht wesentlich verbessert?
Angesichts der oben beschriebenen Probleme scheint es, dass die Genauigkeit zwischen Veröffentlichungen nicht einfach verglichen werden kann, während AUC als schlechter Indikator für die Leistung beschrieben wurde (siehe hier oder hier zum Beispiel).
Irgendwelche Ratschläge, wie man eines dieser 3 Probleme angeht?
quelle
Antworten:
Das ist aufgrund der Varianz zu erwarten. Hier können Sie einen zusätzlichen Effekt haben: libSVM teilt die Daten nur einmal auf, wenn Sie die integrierte Kreuzvalidierung für die Optimierung verwenden. Aufgrund der Natur von SVMs werden Sie feststellen, dass Unterstützungsvektoren (und folglich Genauigkeit) springen, wenn Sie die SVM mit identischen Trainingsdaten erstellen und die Parameter langsam variieren: Solange die SVM-Parameter nicht zu unterschiedlich sind, wird dies immer noch der Fall sein Wählen Sie die gleichen Unterstützungsvektoren. Nur wenn die Parater ausreichend geändert werden, ergeben sich plötzlich unterschiedliche Unterstützungsvektoren. Wenn Sie also das SVM-Parameterraster mit genau denselben Kreuzvalidierungsaufteilungen auswerten, wird möglicherweise die Variabilität ausgeblendet, die Sie zwischen verschiedenen Läufen sehen.
Meiner Meinung nach besteht das Grundproblem darin, dass Sie eine Rastersuche durchführen. Dies ist eine Optimierung, die auf einem einigermaßen reibungslosen Verhalten Ihrer Zielfunktion (Genauigkeit oder was auch immer Sie sonst verwenden) beruht. Aufgrund der hohen Varianz Ihrer Leistungsmessungen wird diese Annahme verletzt. Die "sprunghafte" Abhängigkeit des SVM-Modells verstößt ebenfalls gegen diese Annahme.
Dies ist angesichts der allgemeinen Probleme des Ansatzes zu erwarten.
Normalerweise ist es jedoch möglich, wirklich extreme Parameterwerte zu wählen, bei denen der Klassifikator ausfällt. IMHO sind die Parameterbereiche, in denen die SVMs gut funktionieren, wichtige Informationen.
In jedem Fall benötigen Sie unbedingt eine externe (doppelte / verschachtelte) Validierung der Leistung des Modells, das Sie als "am besten" auswählen.
Ich würde wahrscheinlich eine Reihe von Läufen / Wiederholungen / Iterationen einer äußeren Kreuzvalidierung oder einer äußeren Out-of-Bootstrap-Validierung durchführen und die Verteilung von angeben
Der Unterschied zwischen den letzten beiden ist ein Indikator für eine Überanpassung (z. B. aufgrund des "Überfliegens" der Varianz).
(Was fügen Sie hinzu? Fälle oder Variablen / Merkmale?)
Wenn Sie eine iterative Modellierung durchführen, müssen Sie entweder angeben, dass Ihre Leistung aufgrund Ihres Anpassungsverfahrens nicht ernst genommen werden darf, da sie einer optimistischen Tendenz unterliegt. Die bessere Alternative ist eine Validierung des endgültigen Modells. Die Testdaten davon müssen jedoch unabhängig von allen Daten sein, die jemals in das Training oder Ihren Entscheidungsprozess für die Modellierung eingegangen sind (sodass Sie möglicherweise keine solchen Daten mehr haben).
quelle
Einfacher als BIR sind die logarithmischen oder quadratischen (Brier) Bewertungsregeln. Dies sind korrekte Bewertungen, die im Gegensatz zu dem korrekt klassifizierten Anteil bei der Optimierung nicht zu einem falschen Modell führen.
quelle
Wie Sie hervorheben, sind die Vorhersagegenauigkeit und die AUC in bestimmten Aspekten begrenzt. Ich würde die Bayesian Information Reward (BIR) ausprobieren, die eine genauere Einschätzung darüber geben sollte, wie gut oder schlecht Ihr Klassifikator abschneidet und wie sich dies ändert, wenn Sie Ihre Parameter anpassen (Anzahl der Validierungsfalten usw.).
Die Intuition von BIR ist wie folgt: Ein Wetter wird nicht nur für die Identifizierung der endgültigen Gewinner und Verlierer (Nullen und Einsen) belohnt, sondern vor allem für die Identifizierung der geeigneten Gewinnchancen. Darüber hinaus geht es einen Schritt voraus und vergleicht alle Vorhersagen mit den vorherigen Wahrscheinlichkeiten.
BIR ist nicht auf binäre Klassifikationen beschränkt, sondern wird auch für multinomiale Klassifikationsprobleme verallgemeinert.
quelle