Warum k-fach Cross Validation (CV) Overfits? Oder warum tritt eine Diskrepanz zwischen Lebenslauf und Testsatz auf?


7

Vor kurzem habe ich an einem Projekt gearbeitet und festgestellt, dass meine Kreuzvalidierungsfehlerrate sehr niedrig ist, aber die Fehlerrate des Testsatzes sehr hoch. Dies könnte darauf hinweisen, dass mein Modell überpasst. Warum passt meine Kreuzvalidierung nicht über, während mein Testset überpasst?

Insbesondere habe ich ungefähr 2 Millionen Beobachtungen mit 100 Variablen (n >> p). Ich habe den Datensatz zufällig in 80/20 Zug und Test aufgeteilt. Dann passe ich ein Modell (dh XGboost) mit einer 5-fachen Kreuzvalidierung auf den Trainingssatz an und die geschätzte Fehlerrate ist ziemlich niedrig. Dann habe ich die gleiche Parametereinstellung verwendet und den gesamten Trainingssatz verwendet, um das Modell anzupassen. Überraschenderweise ist die Fehlerrate signifikant höher als die CV-Fehlerrate, wenn ich den Testsatz zur Bewertung der Leistung des Modells verwendet habe. Warum?

Bearbeiten:

(Über die Fehlerrate)

Die Fehlerrate ist tatsächlich ein multinomialer Protokollverlust. Ich habe eine CV-Fehlerrate von 1,320044 (+/- 0,002126) und eine Testfehlerrate von 1,437881 erreicht. Sie scheinen nahe zu sein, wenn sie auf diese beiden Zahlen starren, aber tatsächlich sind sie es nicht. Ich weiß nicht, wie ich das rechtfertigen soll, aber ich bin sicher, dass sie sich innerhalb der Leistungsskala dieses Projekts unterscheiden, die zwischen ~ 1,55 und ~ 1,30 liegt.

Der Weg der 5-fachen Kreuzvalidierung ist wie folgt:

  1. Teilen Sie den Zug in 5 Sätze.
  2. Passen Sie ein Modell iterativ an 4 Sätze an und testen Sie die Leistung am restlichen Satz.
  3. Durchschnitt der Leistung aller fünf Iterationen.

Ich meine, wenn meine Parametereinstellungen das Modell überanpassen, sollte ich es bei diesem Kreuzvalidierungsverfahren sehen, oder? Aber ich sehe es erst, wenn ich das Test-Set benutze. Unter welchen Umständen auf der Erde könnte dies passieren?

Vielen Dank!

Hinzugefügt:

Der einzige Grund, warum ich mir vorstellen kann, warum sich die CV-Fehlerrate von der Testsatz-Fehlerrate unterscheidet, ist

Die Kreuzvalidierung funktioniert nicht gut mit externen Daten, wenn die Daten, die Sie haben, nicht repräsentativ für die Daten sind, die Sie vorhersagen möchten! - hier

Aber ich habe den 2-Millionen-Stichproben-Datensatz zufällig zu 8/2 aufgeteilt und bin der Meinung, dass der Zugsatz und der Testsatz dieselbe Variablenverteilung haben sollten.

(Verzeihung, dass ich die gleiche Frage auch hier poste.)

Bearbeiten:

(Über den Datenverlust)

Ich habe ein interessantes commend von @darXider in Quer validiert . Er sagt,

Manchmal müssen Sie beim Feature-Engineering vorsichtig sein, um Datenlecks zwischen Trainings- und Testsätzen zu vermeiden. Wenn Sie beispielsweise eine PCA für Ihre ursprünglichen, unberührten Daten durchführen, PC1 und PC2 als "neue" Funktionen verwenden und dann Ihren Datensatz in Zug und Test aufteilen, verlieren Sie Informationen aus dem Trainingssatz in den Testsatz. Das erhöht Ihre Punktzahl. Sie haben erwähnt, dass nach einigen Feature-Engineerings Ihr CV-Score und Ihr Test-Score nicht mehr übereinstimmen. Dies könnte auf eine Art Informationsleck zwischen Trainingssatz und Testsatz hinweisen.

Ich frage mich, was genau der "Datenverlust" ist und warum Feature-Engineering VOR dem Teilen immer noch "Datenverlust" verursachen kann.


Die SD von +/- 0,002 scheint für einen 5-fachen Lebenslauf bei einem Mittelwert von 1,32 ziemlich gut zu sein - könnten Sie die einzelnen Fold-Scores angeben?
Neil Slater

Antworten:


3

Ich stimme dem Kommentar zu, den Sie von Cross Validated erhalten haben - Datenlecks passen zu dieser Problemstellung, da bekannt ist, dass sie im Vergleich zum Testergebnis zu optimistische CV-Ergebnisse verursachen. Wir könnten bestätigen, dass es sich tatsächlich um ein Datenleckproblem handelt, wenn Sie Informationen zu den von Ihnen durchgeführten Datenvorverarbeitungsschritten angegeben haben.

Datenverlust bedeutet, dass Informationen aus den Testdaten in die Trainingsdaten gelangen, was dazu führt, dass das trainierte Modell die erwartete Leistung überschätzt und schlecht auf unsichtbare Daten verallgemeinert, da das Modell durch die durchgesickerten Informationen etwas lernen kann, was es sonst nicht lernen würde lernen.

Nehmen wir zum Beispiel an, Sie hatten nur wenige Trainingsbeispiele und synthetisieren am Ende mehr Trainingsbeispiele, die den anderen Trainingsbeispielen irgendwie ähnlich sind. Wenn Sie die Synthese vor der CV-Schleife implementieren und nicht innerhalb (innerhalb jeder Falte), steigt Ihre CV-Genauigkeit sprunghaft an, aber die Testgenauigkeit ist gering. Zusätzlich zur Datensynthese kann ein Datenverlust auch bei anderen Vorverarbeitungsschritten auftreten, z. B. beim Skalieren der Daten, Eingeben fehlender Werte oder Ausführen der Merkmalsauswahl.

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.