Training mit dem vollständigen Datensatz nach Quervalidierung?

139

Ist es immer eine gute Idee, nach einer Kreuzvalidierung mit dem vollständigen Datensatz zu trainieren ? Anders ausgedrückt, ist es in Ordnung, mit allen Mustern in meinem Datensatz zu trainieren und nicht zu überprüfen, ob diese bestimmte Passform überpasst ?


Hintergrundinformationen zum Problem:

Sagen wir , ich habe eine Familie von Modellen parametrisiert durch . Sagen Sie auch, dass ich eine Menge von N Datenpunkten habe und eine Modellauswahl mit k-facher Kreuzvalidierung durchführe, um das Modell zu wählen, das die Daten am besten verallgemeinert.αN

Für die Modellauswahl kann ich eine Suche (z. B. eine Rastersuche) auf indem ich beispielsweise für jeden Kandidaten eine k-fache Kreuzvalidierung durchführe. In jeder Falte der Kreuzvalidierung erhalte ich das erlernte Modell β α .α βα

Der Punkt der Kreuzvalidierung ist, dass ich für jede dieser Faltungen überprüfen kann, ob das erlernte Modell eine Überanpassung aufwies, indem ich es an "unsichtbaren Daten" teste. In Abhängigkeit von den Ergebnissen konnte ich das Modell wählen, das am besten für die Parameter α am besten gelernt wurde und das sich bei der Kreuzvalidierung in der Rastersuche am besten verallgemeinerte.βbestαbest

Jetzt sagt, dass nach der Modellauswahl , ich möchte verwenden alle die Punkte in meinem Dataset und hoffentlich ein besseres Modell lernen. Dafür ich die Parameter verwenden könnte & agr; b e s t entsprechend dem Modell , das ich bei der Modellauswahl gewählt haben, und dann nach dem Training auf dem vollständigen Datensatz, würde ich einen bekommen neues gelernt Modell β f u l l . Das Problem ist , dass, wenn ich alle Punkte in meinen Daten - Set für die Ausbildung nutze, kann ich nicht überprüfen , ob dieses neue Modell gelernt β f u l l ÜberanpassungNαbestβfull βfull auf allen unsichtbaren Daten. Was ist der richtige Weg, um dieses Problem zu denken?

Amelio Vazquez-Reina
quelle
2
Fast ein genaues Duplikat: stats.stackexchange.com/questions/52274 mit vielen wertvollen Antworten. Vielleicht sollten diese Threads zusammengeführt werden, aber ich bin nicht sicher, in welche Richtung. Beide haben Antworten akzeptiert, die sehr gut sind.
Amöbe

Antworten:

111

Bei der Kreuzvalidierung wird die Leistung geschätzt, die mit einer Methode zum Erstellen eines Modells erzielt wird, und nicht die Leistung eines Modells.

Wenn Sie die Kreuzvalidierung verwenden, um die Hyperparameter eines Modells (das s) zu schätzen, und dann diese Hyperparameter verwenden, um ein Modell an den gesamten Datensatz anzupassen, ist dies in Ordnung, sofern Sie die Kreuzvalidierungsschätzung von erkennen Die Performance dürfte (möglicherweise im Wesentlichen) optimistisch eingestellt sein. Dies liegt daran, dass ein Teil des Modells (die Hyperparameter) ausgewählt wurde, um die Kreuzvalidierungsleistung zu minimieren. Wenn die Kreuzvalidierungsstatistik also eine Abweichung ungleich Null aufweist (und dies auch tun wird), besteht die Möglichkeit einer Überanpassung das Modell Auswahlkriterium.α

Wenn Sie die Hyperparameter auswählen und die Leistung des resultierenden Modells schätzen möchten, müssen Sie eine verschachtelte Kreuzvalidierung durchführen, bei der die äußere Kreuzvalidierung zur Bewertung der Leistung des Modells verwendet wird. Die Validierung wird verwendet, um die Hyperparameter in jeder Falte separat zu bestimmen. Sie erstellen das endgültige Modell, indem Sie die Hyperparameter mithilfe der Kreuzvalidierung für die gesamte Menge auswählen und dann den Klassifizierer für die gesamte Datenmenge unter Verwendung der optimierten Hyperparameter erstellen.

Dies ist natürlich rechenintensiv, aber es lohnt sich, da die durch eine falsche Leistungsschätzung verursachte Verzerrung groß sein kann. Siehe meine Zeitung

GC Cawley und NLC Talbot, Überanpassung bei der Modellauswahl und anschließende Auswahlverzerrung bei der Leistungsbewertung, Journal of Machine Learning Research, 2010. Research, vol. 11, S. 2079-2107, Juli 2010. ( www , pdf )

Es ist jedoch weiterhin möglich, dass die Modellauswahl eine Überanpassung aufweist (bei verschachtelter Kreuzvalidierung können Sie nur testen). Eine von mir als nützlich erachtete Methode besteht darin, dem Kreuzvalidierungsfehler einen Regularisierungsbegriff hinzuzufügen, der Hyperparameterwerte benachteiligt, die wahrscheinlich zu überkomplexen Modellen führen, siehe

GC Cawley und NLC Talbot, Verhinderung einer Überanpassung bei der Modellauswahl durch Bayes'sche Regularisierung der Hyperparameter, Journal of Machine Learning Research, Band 8, Seiten 841-861, April 2007. ( www , pdf )

Die Antworten auf Ihre Frage lauten also (i) Ja, Sie sollten den vollständigen Datensatz verwenden, um das endgültige Modell zu erstellen. Je mehr Daten Sie verwenden, desto wahrscheinlicher ist eine gute Verallgemeinerung. (Ii) Stellen Sie jedoch sicher, dass Sie über eine unvoreingenommene Leistungsschätzung erhalten verschachtelte Kreuzvalidierung und erwägen möglicherweise eine Bestrafung der Kreuzvalidierungsstatistik, um eine Überanpassung bei der Modellauswahl weiter zu vermeiden.

Dikran Beuteltier
quelle
3
+1: Beantwortet die Frage: "Wenn Sie die Hyperparameter eines Modells (das αs) durch Kreuzvalidierung schätzen und dann diese Hyperparameter verwenden, um ein Modell an den gesamten Datensatz anzupassen, ist das in Ordnung ..."
Neil G
4
@soufanom, nein, die Verwendung von "ersten Experimenten" zur Auswahl des Modells führt wahrscheinlich zu einer Überanpassung und führt mit ziemlicher Sicherheit zu einer optimistischen Verzerrung der Leistungsanalyse. Die für die Leistungsanalyse verwendete Kreuzvalidierung muss JEDEN Schritt, der zum Anpassen des Modells verwendet wird, in jeder Falte unabhängig wiederholen. Die Experimente in meinem Aufsatz zeigen, dass Kernelmodelle sehr empfindlich auf diese Art von Verzerrung reagieren können. Daher ist es wichtig, die Modellauswahl und Leistungsbewertung mit größtmöglicher Genauigkeit durchzuführen.
Dikran Marsupial
3
Bei Kernel-Methoden wie der SVM ist es häufig möglich, eine einmalige Kreuzvalidierung nahezu ohne Rechenaufwand durchzuführen (siehe die in meiner Antwort aufgeführten Artikel). Ich verwende diese "virtuelle" ausgelassene Kreuzvalidierung zum Optimieren der Hyperparameter, die zur Leistungsbewertung in eine k-fache Kreuzvalidierung eingebettet ist. Die Kosten sind dann durchaus vertretbar. Meiner Meinung nach ist es nicht akzeptabel, ein Verfahren zu verwenden, bei dem die Leistungsbewertung in irgendeiner Weise durch die Abstimmung der Hyperparameter verzerrt wird. Es ist den Rechenaufwand wert, eine verlässliche Schätzung zu erhalten.
Dikran Beuteltier
2
@DikranMarsupial. Ich verstehe den dritten Absatz in Ihrer Antwort nicht ganz. Wenn ich eine verschachtelte Kreuzvalidierung durchführe, erhalte ich für jede Falte des äußeren CV einen anderen Satz von Hyperparametern (dh, ich erhalte einen Satz von Hyperparametern, wenn ich den inneren CV in einem Gitter von Parametern ausführe). Wie wähle ich dann den besten Satz von Hyperparametern aus?
Amelio Vazquez-Reina
1
Die Kreuzvalidierung ist im Wesentlichen ein Mittel zur Schätzung der Leistung einer Methode zur Anpassung eines Modells und nicht der Methode selbst. Nachdem Sie also eine verschachtelte Kreuzvalidierung durchgeführt haben, um die Leistungsschätzung zu erhalten, erstellen Sie einfach das endgültige Modell unter Verwendung des gesamten Datensatzes neu. Verwenden Sie dazu das von Ihnen kreuzvalidierte Verfahren (einschließlich der Auswahl der Hyperparameter).
Dikran Beuteltier
23

Um die Antwort von @ mark999 zu ergänzen, ist Max Kuhns caretPaket (Klassifizierungs- und Regressionstraining) die umfassendste Quelle in R für die Modellauswahl auf der Grundlage der Bootstrap-Kreuzvalidierung oder des N-fachen Lebenslaufs sowie einiger anderer Schemata.

Um die Größe des rmsPakets nicht außer Acht zu lassen , caretkönnen Sie so ziemlich jede in R verfügbare Lernmethode anpassen, während dies validatenur mit rmsMethoden funktioniert (glaube ich).

Das caretPaket ist eine einzige Infrastruktur zur Vorverarbeitung, Anpassung und Bewertung beliebiger Modelle. Daher ist es für alle Methoden einfach zu verwenden und bietet eine grafische Bewertung vieler Leistungsmessungen (etwas, das neben dem Überanpassungsproblem die Modellauswahl erheblich beeinflussen kann) gut) über Ihr Raster und variable Bedeutung.

Sehen Sie sich die Paketvignetten an, um zu beginnen (die Verwendung ist sehr einfach).
Datenvorverarbeitung
Variablenauswahl mit Caret
Modellbildung mit Caret
Variable Wichtigkeit

Sie können auch die Caret-Website aufrufen, um weitere Informationen zum Paket und bestimmte Implementierungsbeispiele zu erhalten:
Offizielle Caret-Website

Momo
quelle
Vielen Dank. Wissen Sie, ob es nach der Modellauswahl (die durch Aufrufen erfolgt train) in caret eine Möglichkeit gibt, mit dem vollständigen Datensatz zu trainieren?
Amelio Vazquez-Reina
Wir sind uns nicht sicher, ob das eine gute Idee ist oder warum Sie das wollen, aber Sie können einfach das endgültige Modell, das mit dem Zug zurückgegeben wurde, in den vollständigen Datensatz einfügen.
Momo
16

Ich glaube, dass Frank Harrell eher eine Bootstrap-Validierung als eine Kreuzvalidierung empfehlen würde. Mit der Bootstrap-Validierung können Sie das Modell validieren, das in den vollständigen Datensatz eingepasst ist, und es ist stabiler als die Kreuzvalidierung. Sie können dies in R mit validateHarrells rmsPaket tun .

Weitere Informationen finden Sie im Buch "Regression Modeling Strategies" von Harrell und / oder "An Introduction to the Bootstrap" von Efron und Tibshirani.

mark999
quelle
9
Um einen nächsten Mythos über "schlechten Lebenslauf" auszulassen, ist dies ein Terminologieproblem - Harrells "Kreuzvalidierung" bedeutet N-facher Lebenslauf und "Bootstrap-Validierung" bedeutet erneutes Abtasten des Lebenslaufs. Natürlich stimme ich zu, dass dieser zweite Geschmack stabiler und insgesamt schöner ist, aber dies ist auch eine Art Kreuzvalidierung.
1
mark999 oder @mbq, würde es Ihnen etwas ausmachen, herauszufinden, wie man mit Bootstrap ein Modell validieren kann, das auf den vollständigen Datensatz passt?
Amelio Vazquez-Reina
1
@ user27915816 Naja, prinzipiell nohow; Die Idee hinter der Kreuzvalidierung ist, dass Sie testen, ob die gegebene Trainingsmethode verlässlich gute Modelle an Sets erstellt, die dem endgültigen sehr ähnlich sind, und in diesem Fall diese Beobachtung auf das gesamte Set verallgemeinern, wobei Sie stillschweigend davon ausgehen, dass nichts Ungewöhnliches passieren wird und diese CV-Methode, die Sie verwendet haben, ist irgendwie nicht voreingenommen. Das ist natürlich fast immer gut genug, aber Sie können nie sicher sein , dass das Modell, das auf all Ihren Daten basiert, nicht überarbeitet ist.
14

Ich denke, Sie haben hier eine Reihe von verschiedenen Fragen:

Das Problem ist, dass ich, wenn ich alle Punkte in meinem Datensatz für das Training verwende, nicht überprüfen kann, ob dieses neu erlernte Modell vollständig überpasst!

Die Sache ist, dass Sie (einen) Validierungsschritt nur für eine Sache verwenden können: entweder zur Parameteroptimierung (x) oder zur Schätzung der Generalisierungsleistung.

Wenn Sie also eine Parameteroptimierung durch Kreuzvalidierung (oder eine andere datengesteuerte Parameterbestimmung) durchführen, benötigen Sie Testmuster, die von diesen Trainings- und Optimierungsmustern unabhängig sind. Dikran nennt es verschachtelte Kreuzvalidierung, ein anderer Name ist doppelte Kreuzvalidierung. Oder natürlich ein eigenständiges Testset.

Hier ist die Frage für diesen Beitrag: Ist es eine gute Idee, nach einer k-fachen Kreuzvalidierung mit dem vollständigen Datensatz zu trainieren? Oder ist es besser, sich an eines der Modelle zu halten, die in einer der Kreuzvalidierungssplits für αbest gelernt wurden?

Die Verwendung eines der Kreuzvalidierungsmodelle ist in der Regel schlechter als das Training am vollständigen Satz (zumindest wenn Ihre Lernkurvenleistung = f (nsamples) immer noch zunimmt. In der Praxis ist dies: Wenn dies nicht der Fall wäre, hätten Sie wahrscheinlich den Satz erstellt Neben einem unabhängigen Test-Set.)

Wenn Sie große Unterschiede zwischen den Kreuzvalidierungsmodellen (mit denselben Parametern) feststellen, sind Ihre Modelle instabil. In diesem Fall kann die Aggregation der Modelle hilfreich sein und sogar besser sein als die Verwendung eines Modells, das für die gesamten Daten trainiert wurde.

Update: Bei dieser Aggregation handelt es sich um die Idee, dass das Absacken auf das ersatzlose Resampling (Kreuzvalidierung) und nicht auf das Resampling mit Ersetzung (Bootstrap- / Out-of-Bootstrap-Validierung) angewendet wird.

In diesem Artikel haben wir diese Technik verwendet:
Beleites, C. & Salzer, R .: Bewertung und Verbesserung der Stabilität chemometrischer Modelle in Situationen mit geringer Probengröße, Anal Bioanal Chem, 390, 1261-1271 (2008).
DOI: 10.1007 / s00216-007-1818-6

Am wichtigsten ist vielleicht, wie kann ich mit allen Punkten in meinem Datensatz trainieren und trotzdem die Überanpassung bekämpfen?

Sehr konservativ mit den für das "beste" Modell zulässigen Freiheitsgraden, dh unter Berücksichtigung der (zufälligen) Unsicherheit bei den Ergebnissen der Optimierungskreuzvalidierung. Wenn die df tatsächlich für die Kreuzvalidierungsmodelle geeignet sind, stehen die Chancen gut, dass sie für den größeren Trainingssatz nicht zu viele sind . Die Gefahr besteht darin, dass die Parameteroptimierung tatsächlich aus mehreren Tests besteht. Sie müssen sich vor versehentlich gut aussehenden Parametersätzen schützen.

Glaube
quelle
...If you observe a large variation between the cross validation models (with the same parameters), then your models are unstable. In that case, aggregating the models can help...Können Sie das etwas näher erläutern? Wenn ich z. B. eine logistische Regression in einem 10-k-Cross-validierten Setup durchführe und am Ende 10 Koeffizientensätze erhalte, empfehlen Sie, die Koeffizientenschätzungen zu einem endgültigen Modell zu aggregieren? Wenn ja, wie kann dies mit den Mitteln geschehen?
Zhubarb
@cbeleites kannst du näher erläutern If the d.f. are actually appropriate for the cross validation models. Nach meinem Verständnis argumentieren Sie, dass die Zug- / Validierungssätze im Vergleich zum gesamten Datensatz nicht sehr groß sind. Stimmt das?
Jpcgandre
1
1k
1
Wichtiger noch: Die iterierten Kreuzvalidierungs-Ersatzmodelle haben den gleichen Satz von Hyperparametern. Das heißt, sie sind in allem, was Sie für wichtig halten, gleichwertig, aber die willkürliche Auswahl von Schulungs- und Testfällen. Die Auswahl eines "guten" Modells sollte daher in erster Linie eine gute Test- / Trainingssatzkombination sein - was wir normalerweise nicht wollen: Wir wollen eine Wahl, die sich gut verallgemeinert und daher nicht nur für günstige Fälle funktioniert. Unter diesem Gesichtspunkt macht die Auswahl eines Ersatzmodells aus einer "normalen" Kreuzvalidierung für mich keinen Sinn.
Glaube
1
@jpcgandre: (df) Ich behaupte, dass man eine Modellkomplexität wählt, die für das Training von geeignet ist1-1k
6

Was Sie tun, ist keine Kreuzvalidierung, sondern eine Art stochastische Optimierung.

Die Idee von CV ist es, eine Leistung an unsichtbaren Daten zu simulieren, indem mehrere Runden des Aufbaus des Modells auf einer Teilmenge von Objekten und des Testens an den verbleibenden Objekten durchgeführt werden. Die etwas gemittelten Ergebnisse aller Runden sind die Näherungswerte für die Leistung eines am gesamten Satz trainierten Modells .

Bei der Modellauswahl sollten Sie für jeden Parametersatz einen vollständigen Lebenslauf erstellen und somit für jedes Setup eine Leistungsannäherung für den gesamten Satz erhalten, so wie Sie es sich anscheinend gewünscht haben.

Beachten Sie jedoch, dass keineswegs garantiert werden kann, dass das Modell mit der bestmöglichen approximierten Genauigkeit tatsächlich das beste Modell ist. Sie können das gesamte Modellauswahlverfahren durch Kreuzvalidierung überprüfen, um festzustellen, dass im Parameterraum ein bestimmter Bereich vorhanden ist, in dem die Unterschiede bestehen Modellgenauigkeiten sind nicht signifikant.


quelle
2
β
@AmV Wenn ja, ok - wie ich schrieb, testet CV bereits das komplette Szenario, ohne neue Daten kann man nicht mehr sagen. Sie können auch hier höchstens einen verschachtelten Lebenslauf erstellen, um festzustellen, ob die Modellauswahl selbst keine Überanpassung bewirkt (wenn sich die Auswahl sehr gut verbessert oder die Daten verrauscht sind, ist das Risiko ziemlich groß).