Verschachtelte Kreuzvalidierung für die Modellauswahl


91

Wie kann man verschachtelte Kreuzvalidierung für die Modellauswahl verwenden ?

Nach dem, was ich online gelesen habe, funktioniert der verschachtelte Lebenslauf wie folgt:

  • Es gibt die innere CV-Schleife, in der wir eine Rastersuche durchführen können (z. B. Ausführen von K-Fold für jedes verfügbare Modell, z. B. Kombination von Hyperparametern / Merkmalen).
  • Es gibt die äußere CV-Schleife, in der wir die Leistung des Modells, das in der inneren Falte gewonnen hat, auf einer separaten äußeren Falte messen.

Am Ende dieses Prozesses erhalten wir Modelle ( K ist die Anzahl der Falten in der äußeren Schleife). Diese Modelle sind diejenigen , die gewonnen in der Rastersuche innerhalb des inneren CV, und sie sind wahrscheinlich anders (zB SVM mit verschiedenen Kernel, trainiert mit möglicherweise unterschiedlichen Funktionen, auf die Rastersuche abhängig).KK

Wie wähle ich aus dieser Ausgabe ein Modell aus? Es scheint mir, dass die Auswahl des besten Modells aus diesen Gewinnermodellen kein fairer Vergleich wäre, da jedes Modell an verschiedenen Stellen des Datensatzes trainiert und getestet wurde.K

Wie kann ich einen verschachtelten Lebenslauf für die Modellauswahl verwenden?

Außerdem habe ich Threads gelesen, in denen erörtert wurde, wie die Auswahl verschachtelter Modelle zur Analyse des Lernvorgangs nützlich ist. Welche Arten von Analysen / Überprüfungen kann ich mit den Ergebnissen machen, die ich aus den äußeren K-Falten erhalte?

Antworten:


76

Wie wähle ich ein Modell aus dieser Ausgabe aus?

Kurze Antwort: Das tust du nicht.

Behandeln Sie die innere Kreuzvalidierung als Teil des Modellanpassungsverfahrens. Dies bedeutet, dass die Anpassung einschließlich der Anpassung der Hyperparameter (hier verbirgt sich die innere Kreuzvalidierung) wie jede andere Modell-Esitmationsroutine ist.
Die äußere Kreuzvalidierung schätzt die Leistung dieses Modellanpassungsansatzes. Dafür verwenden Sie die üblichen Annahmen

  • Die k äußeren Ersatzmodelle entsprechen dem "echten" Modell, das model.fitting.proceduremit allen Daten erstellt wurde.
  • k

k

Wie kann ich einen verschachtelten Lebenslauf für die Modellauswahl verwenden?

Der innere Lebenslauf übernimmt die Auswahl.

Es scheint mir, dass die Auswahl des besten Modells aus diesen K Gewinnermodellen kein fairer Vergleich wäre, da jedes Modell an verschiedenen Stellen des Datensatzes trainiert und getestet wurde.

k

  • Nicht dieselben Testdaten haben: Da Sie später behaupten möchten, dass sich die Testergebnisse auf nie gesehene Daten verallgemeinern, kann dies keinen Unterschied machen.
  • Nicht die gleichen Trainingsdaten haben:
    • Wenn die Modelle stabil sind, macht dies keinen Unterschied: Stabil bedeutet hier, dass sich das Modell nicht (stark) ändert, wenn die Trainingsdaten "gestört" werden, indem einige Fälle durch andere ersetzt werden.
    • Wenn die Modelle nicht stabil sind, sind drei Überlegungen wichtig:
      1. k
      2. k
      3. Wenn Instabilität ein echtes Problem ist, können Sie die Leistung für das "echte" Modell nicht gut extrapolieren.

Was mich zu deiner letzten Frage bringt:

Welche Arten von Analysen / Überprüfungen kann ich mit den Ergebnissen machen, die ich aus den äußeren K-Falten erhalte?

  • auf Stabilität der Vorhersagen prüfen (iterierte / wiederholte Kreuzvalidierung verwenden)
  • Überprüfen Sie die Stabilität / Variation der optimierten Hyperparameter.
    Zum einen deuten stark verstreute Hyperparameter möglicherweise darauf hin, dass die innere Optimierung nicht funktioniert hat. Zum anderen können Sie in ähnlichen Situationen in Zukunft möglicherweise die Hyperparameter ohne den kostspieligen Optimierungsschritt festlegen. Mit kostspielig beziehe ich mich nicht auf Rechenressourcen, sondern auf die Tatsache, dass diese "Kosten" -Informationen besser zur Schätzung der "normalen" Modellparameter herangezogen werden können.

  • Überprüfen Sie die Differenz zwischen der inneren und der äußeren Schätzung des ausgewählten Modells. Wenn es einen großen Unterschied gibt (das Innere ist sehr überoptimistisch), besteht die Gefahr, dass die innere Optimierung aufgrund von Überanpassung nicht gut funktioniert.


update @ user99889's frage: Was tun, wenn der äußere Lebenslauf instabil wird?

Zuallererst unterscheidet sich das Erkennen in der äußeren CV-Schleife, dass die Modelle in dieser Hinsicht keine stabilen Vorhersagen liefern, nicht wirklich vom Erkennen, dass der Vorhersagefehler für die Anwendung zu hoch ist. Es ist eines der möglichen Ergebnisse der Modellvalidierung (oder -verifizierung), dass das Modell, über das wir verfügen, nicht für seinen Zweck geeignet ist.

In dem Kommentar zu @davips habe ich darüber nachgedacht, die Instabilität im inneren Lebenslauf zu beheben - also als Teil des Modelloptimierungsprozesses .

Aber Sie haben sicherlich Recht: Wenn wir unser Modell auf der Grundlage der Ergebnisse des äußeren Lebenslaufs ändern, ist eine weitere Runde unabhängiger Tests des geänderten Modells erforderlich.
Instabilität im äußeren Lebenslauf wäre jedoch auch ein Zeichen dafür, dass die Optimierung nicht gut eingestellt war. Wenn man also Instabilität im äußeren Lebenslauf findet, bedeutet dies, dass der innere Lebenslauf die Instabilität nicht in der erforderlichen Weise bestraft - das wäre mein Hauptanliegen Kritik in einer solchen Situation. Mit anderen Worten, warum ermöglicht / führt die Optimierung zu einer starken Überanpassung von Modellen?

Allerdings gibt es eine Besonderheit hier , dass IMHO kann die weitere Veränderung des „final“ -Modell nach entschuldigt sorgfältige Prüfung der genauen Umstände : Da wir eine Überanpassung taten erkennen, jede vorgeschlagene Änderung (weniger df / restriktive oder Aggregation) zum Modell würde in Richtung einer geringeren Überanpassung (oder zumindest in Richtung von Hyperparametern, die weniger anfällig für Überanpassungen sind). Der Punkt des unabhängigen Testens ist das Erkennen von Überanpassung - Unteranpassung kann anhand von Daten erkannt werden, die bereits im Trainingsprozess verwendet wurden.

Wenn wir also beispielsweise über eine weitere Reduzierung der Anzahl latenter Variablen in einem PLS-Modell sprechen, die vergleichsweise harmlos wäre (wenn die vorgeschlagene Änderung ein völlig anderer Modelltyp wäre, z. B. PLS anstelle von SVM, wären alle Wetten ungültig) ), und ich wäre noch gelassener, wenn ich wüsste, dass wir uns sowieso in einem Zwischenstadium der Modellierung befinden. Wenn die optimierten Modelle immer noch instabil sind, sind ohne Zweifel weitere Fälle erforderlich. In vielen Situationen müssen Sie möglicherweise Studien durchführen, mit denen verschiedene Leistungsaspekte (z. B. die Verallgemeinerung zukünftig erfasster Daten) ordnungsgemäß getestet werden können. Dennoch würde ich darauf bestehen, dass der vollständige Modellierungsprozess gemeldet werden muss und dass die Auswirkungen dieser späten Änderungen sorgfältig besprochen werden müssen.

Darüber hinaus wäre eine Aggregation mit und aus dem Sack analogen CV-Schätzungen der Leistung aus den bereits verfügbaren Ergebnissen möglich - was die andere Art der "Nachbearbeitung" des Modells ist, die ich hier für harmlos halten würde. Wiederum wäre es dann besser gewesen, wenn die Studie von Anfang an darauf ausgelegt wäre, zu überprüfen, dass die Aggregation keinen Vorteil gegenüber einzelnen Vorhersagen bietet (was eine andere Art zu sagen ist, dass die einzelnen Modelle stabil sind).


Update (2019): Je mehr ich über diese Situationen nachdenke, desto mehr bevorzuge ich den Ansatz der "verschachtelten Kreuzvalidierung anscheinend ohne Verschachtelung" .


Wenn der Klassifikator instabil ist, sollten wir für die Modellauswahl den mit der mittleren Leistung unter den besten auswählen? Diese Wahl wäre analog zu Ihrem Vorschlag, die innere Leistung mit der äußeren Leistung zu vergleichen.
Viyps

2
@davips: Wenn die Modelle instabil sind, funktioniert die Optimierung nicht (Instabilität verursacht zusätzliche Varianz). Die Auswahl eines Modells mit mittlerer (oder durchschnittlicher) Leistung hilft jedoch nicht. Wenn die Modelle instabil sind, würde ich stattdessen empfehlen, entweder restriktivere Modelle (z. B. stärkere Regularisierung) oder ein Modellensemble (das sich grundlegend von der Auswahl eines Modells unterscheidet) zu verwenden.
Glaube

1
@ user99889: siehe aktualisierte Antwort.
cbeleites

1
@ user99889: ja - aber erwarte da keine wunder. Wenn Stabilität beim Training mit 80% der Fälle ein Problem ist (k = 5), ist es wahrscheinlich immer noch ein Problem mit k = 10, dh 90% von n = zusätzlichen 12,5% im Vergleich zu den 80% / k = 5-Ersatzmodellen.
Glaube

1
@ cbeleites: eine verwandte Hypothese. Angenommen, ich entscheide mich, einen Parameterraum c: [1,2,3] zu durchsuchen. Ich führe einen verschachtelten Lebenslauf für meinen gesamten Datensatz aus und finde die Leistung nicht so großartig. Ich erweitere daher meinen Suchraum auf c: [0,5,1,1,5,2,5,3,3,5,4]. Habe ich etwas sehr Schlimmes getan? Es sieht so aus, als hätte ich meinen Parameterraum (der Teil des Modellierungsprozesses ist) grundlegend geändert, basierend auf dem Wissen, das ich aus den Testdaten gewonnen habe, und muss daher einen Datensatz außerhalb meines aktuellen Datensatzes auswerten. Gerne machen Sie dies eine separate Frage, wenn Sie denken, dass es am besten ist.
user0

27

Neben der ausgezeichneten Antwort (+1) besteht die Grundidee darin, dass anhand der Kreuzvalidierung die Leistung einer Methode zum Anpassen eines Modells und nicht des Modells selbst bewertet wird . Wenn Sie eine Modellauswahl durchführen müssen, müssen Sie diese unabhängig in jeder Falte des Kreuzvalidierungsverfahrens durchführen, da sie ein integraler Bestandteil des Modellanpassungsverfahrens ist. Wenn Sie ein auf der Kreuzvalidierung basierendes Modellauswahlverfahren verwenden, bedeutet dies, dass Sie eine verschachtelte Kreuzvalidierung erhalten. Es ist hilfreich, den Zweck jeder Kreuzvalidierung zu berücksichtigen - eine dient der Modellauswahl, die andere der Leistungsschätzung.

Ich würde mein endgültiges Modell erstellen, indem ich das Modell (einschließlich Modellauswahl) an den gesamten Datensatz anpasse, nachdem ich eine verschachtelte Kreuzvalidierung verwendet habe, um eine Vorstellung von der Leistung zu bekommen, die ich vernünftigerweise von diesem Modell erwarten kann.


1
Warum brauchst du das get an idea of the performance?
Viyps

1
@davips Wenn eine statistische Methode für einen praktischen Zweck verwendet werden soll, möchten die Benutzer häufig eine Vorstellung davon haben, wie gut sie funktioniert (z. B. medizinischer Screening-Test). Auch wenn Sie einen Algorithmus für maschinelles Lernen entwickeln, ist es hilfreich, eine unvoreingenommene Schätzung der Leistung im Vergleich zu konkurrierenden Methoden zu haben. Dies ist auch ein nützliches Mittel, um zu überprüfen, ob die Methode tatsächlich funktioniert (was ungültig wird, wenn die Kreuzvalidierung sowohl zur Auswahl von Parametern als auch zur Schätzung der Leistung verwendet wird).
Dikran Marsupial

5
Um also tatsächlich zu entscheiden, welcher Parameter im endgültigen Modell verwendet werden soll, würden Sie die innere Schleife einmal ausführen? Wenn also die innere Schleife eine 10-fache Validierung wäre, würden Sie 1/10 des Datenzuges jedes Modells zehnmal wiederholen und dann den Parameterwert mit dem kleinsten durchschnittlichen Fehler auswählen. Trainieren Sie dann das Modell mit diesem Parameterwert für den gesamten Datensatz neu.
Emschorsch

2
Ja, das ist richtig. r
Dikran Marsupial

1
@FedericoTedeschi Die Kreuzvalidierungen müssen verschachtelt sein und nicht nur eine andere Aufteilung, um eine unvoreingenommene Leistungsschätzung zu erhalten (siehe Abschnitt 5.3 meines Dokuments jmlr.csail.mit.edu/papers/volume11/cawley10a/cawley10a.pdf ). . Im Allgemeinen verwende ich LOOCV nur zur Modellauswahl für Modelle, bei denen eine effiziente Berechnung möglich ist, und verwende Bootstrapping / Bagging für kleine Datasets (wobei der OOB-Fehler die äußere Kreuzvalidierung ersetzt).
Dikran Beuteltier

7

Ich glaube nicht, dass jemand die erste Frage wirklich beantwortet hat. Mit "verschachtelter Kreuzvalidierung" meinte er wohl, sie mit GridSearch zu kombinieren. In der Regel ist in GridSearch ein Lebenslauf integriert, in dem angegeben ist, wie viele Falten getestet werden sollen. Ich halte es für eine gute Praxis, diese beiden zu kombinieren, aber das Modell von GridSearch und CrossValidation ist nicht Ihr endgültiges Modell. Sie sollten die besten Parameter auswählen und schließlich ein neues Modell mit all Ihren Daten trainieren oder auch hier eine CrossValidation mit unsichtbaren Daten durchführen. Wenn das Modell dann wirklich so gut ist, trainieren Sie es mit all Ihren Daten. Das ist dein letztes Modell.


3
Zur Verdeutlichung wird in Python-Scikit-Learn GridSearchCV(refit=True)ein Modell anhand der besten Parameter auf die vollständigen Daten aktualisiert , sodass kein zusätzlicher Schritt erforderlich ist. Siehe Dokumentation
Paul

Sie haben Recht mit der Refit-Option. Ich habe nur gesagt, dass das offensichtlich ist !!
anselal

"Das Modell von GridSearch ist nicht Ihr endgültiges Modell". Aber meine Punkte sind , dass das Gitter Suchmodell mit Refit = True ist das endgültige Modell. Meinst du du und ich sind auf der gleichen Seite? Aber dann sehe ich immer noch nicht, wo die Verschachtelung in der Rastersuche mit Lebenslauf stattfindet. Es scheint mir eine einzelne Ebene des Lebenslaufs zu sein (z. B. ist der fünffache Lebenslauf bei der Rastersuche eine einzelne Ebene des Lebenslaufs).
Paul

Wir sind auf der gleichen Seite über die Überholung. Aber mit verschachteltem Lebenslauf meinen wir, dass Sie eine weitere Lebenslauf-Schleife außerhalb Ihrer GridSearch erstellen, einige Daten aus dem Training herauslassen und Ihr endgültiges Modell testen, um festzustellen, ob es verallgemeinert ist (gute Vorhersagen für unbekannte Daten)
anselal
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.