Wie wendet man eine Kreuzvalidierung im Kontext der Auswahl von Lernparametern für Support-Vektor-Maschinen angemessen an?

9

Das wunderbare libsvm-Paket bietet eine Python-Oberfläche und eine Datei "easy.py", die automatisch nach Lernparametern (Kosten & Gamma) sucht, die die Genauigkeit des Klassifikators maximieren. Innerhalb eines bestimmten Kandidatensatzes von Lernparametern wird die Genauigkeit durch Kreuzvalidierung operationalisiert, aber ich denke, dies untergräbt den Zweck der Kreuzvalidierung. Das heißt, sofern die Lernparameter selbst so ausgewählt werden können, dass eine Überanpassung der Daten verursacht wird, wäre es meines Erachtens angemessener, eine Kreuzvalidierung auf der Ebene der Suche selbst anzuwenden: Führen Sie die Suche durch auf einem Trainingsdatensatz und bewerten Sie dann die endgültige Genauigkeit von SVM, die sich aus den endgültig ausgewählten Lernparametern ergibt, durch Auswertung in einem separaten Testdatensatz. Oder fehlt mir hier etwas?

Mike Lawrence
quelle

Antworten:

10

Wenn Sie die Hyperparameter in den vollständigen Trainingsdaten lernen und dann gegenseitig validieren, erhalten Sie eine optimistisch voreingenommene Leistungsschätzung, da die Testdaten in jeder Falte bereits zum Einstellen der Hyperparameter verwendet wurden, also die Hyperparameter. Die ausgewählten Parameter werden teilweise ausgewählt, weil sie zu den Daten im Testsatz passen. Die auf diese Weise eingeführte optimistische Tendenz kann unerwartet groß sein. Siehe Cawley und Talbot, "Über Überanpassung bei der Modellauswahl und nachfolgende Auswahlverzerrung bei der Leistungsbewertung", JMLR 11 (Jul): 2079-2107, 2010.(Insbesondere Abschnitt 5.3). Am besten ist eine verschachtelte Kreuzvalidierung. Die Grundidee ist, dass Sie die gesamte Methode, die zum Generieren des Modells verwendet wird, gegenseitig validieren. Behandeln Sie die Modellauswahl (Auswahl der Hyperparameter) einfach als Teil des Modellanpassungsverfahrens (bei dem die Parameter bestimmt werden), und Sie können nicht gehen zu weit falsch.

Wenn Sie eine Kreuzvalidierung für den Trainingssatz verwenden, um die Hyperparameter zu bestimmen, und dann die Leistung eines Modells bewerten, das anhand dieser Parameter für den gesamten Trainingssatz trainiert wurde, und dies mithilfe eines separaten Testsatzes, ist dies ebenfalls in Ordnung (vorausgesetzt, Sie verfügen über genügend Daten zur zuverlässigen Anpassung des Modells und zur Schätzung der Leistung mithilfe disjunkter Partitionen).

Dikran Beuteltier
quelle
Schöne Referenz!
Andrew
Wie würden Sie im zweiten Absatz auch die Funktionsauswahl einbeziehen? Wäre es in Ordnung: i) eine Hyperparameteroptimierung wie oben beschrieben durchzuführen (optimale Hyperparameter zu erhalten) ii) die Merkmalsauswahl in einer weiteren Runde der Kreuzvalidierung durchzuführen, um eine Reihe von Top-Prädiktoren zu erhalten (die Merkmalsauswahl wird für Trainingsdaten ausgeführt, in die unterteilt ist ein Subtraining- und Validierungssatz unter Verwendung einer beliebigen Resampling-Methode, die bei der Optimierung von Hyperparametern verwendet wird). iii) Trainieren Sie ein Modell mit dem obersten Hyperparameter und dem obersten Prädiktor, die auf vollständigen Trainingsdaten basieren. Test auf separatem Testset.
Sma
Um etwas klarer zu sein: ii) Führen Sie die Merkmalsauswahl in einer weiteren Runde der Kreuzvalidierung durch, um eine Reihe von Top-Prädiktoren zu erhalten (Trainingsdaten werden in Subtraining und Validierungssatz über eine Resampling-Methode aufgeteilt, die bei der Hyperparameteroptimierung verwendet wird. Anschließend wird die Merkmalsauswahl ausgeführt Subtraining Daten).
Sma
Könnte man alternativ zuerst eine Merkmalsauswahl über eine Kreuzvalidierung durchführen, um den Top-Feature-Set zu erhalten, und dann eine Hyperparameter-Optimierung aller interessierenden Modelle unter Verwendung des Top-Feature-Sets durchführen (wie oben in der Kreuzvalidierung)? Trainieren Sie dann die Modelle mit ihren optimalen Hyperparametern auf vollständigen Trainingsdaten mit nur dem bereits ermittelten Top-Feature-Set und testen Sie auf einem separaten Test-Set?
Sma
0

Ich denke nicht, dass Kreuzvalidierung im Fall von LIBSVM missbraucht wird, da dies auf der Ebene der Testdaten erfolgt. Alles, was es tut, ist eine k-fache Kreuzvalidierung und die Suche nach dem besten Parameter für den RBF-Kernel. Lassen Sie mich wissen, dass Sie nicht einverstanden sind.

user20350
quelle
Die Auswahl der Hyperparameter sollte in keiner Weise die Testdaten betreffen, da dies zu einer optimistisch verzerrten Leistungsschätzung führt. Im Wesentlichen sollte die Auswahl der Hyperparameter als integraler Bestandteil der Anpassung der SVM behandelt werden. Daher muss das Testverfahren auch den Fehler aufgrund der Auswahl der Hyperparameter testen. Siehe mein Papier, auf das ich in meiner Antwort auf die Frage verweise (Es ist Open Access).
Dikran Marsupial