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:
- Teilen Sie den Zug in 5 Sätze.
- Passen Sie ein Modell iterativ an 4 Sätze an und testen Sie die Leistung am restlichen Satz.
- 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.