Betrachten Sie ein neuronales Netzwerk:
Für einen bestimmten Datensatz teilen wir ihn in Schulungs-, Validierungs- und Testsätze ein. Angenommen, wir tun dies im klassischen Verhältnis 60:20:20. Dann verhindern wir eine Überanpassung, indem wir das Netzwerk validieren, indem wir es auf dem Validierungssatz überprüfen. Was ist dann die Notwendigkeit, es auf dem Test-Set zu testen, um seine Leistung zu überprüfen?
Wird der Fehler im Test-Set nicht in gewisser Weise mit dem Validierungs-Set identisch sein, da es sich beim Netzwerk um unsichtbare Daten handelt, genau wie beim Validierungs-Set, und beide in der Anzahl gleich sind?
Können wir stattdessen den Trainingssatz nicht erhöhen, indem wir den Testsatz mit dem Testsatz zusammenführen, sodass wir mehr Trainingsdaten haben und das Netzwerk besser trainiert, und dann den Validierungssatz verwenden, um eine Überanpassung zu verhindern? Warum machen wir das nicht?
quelle
Antworten:
Angenommen, Sie trainieren ein Modell, dessen Leistung von einer Reihe von Hyperparametern abhängt. Im Fall eines neuronalen Netzwerks können diese Parameter beispielsweise die Lernrate oder die Anzahl der Trainingsiterationen sein.
Bei einer Auswahl von Hyperparameterwerten verwenden Sie das Trainingsset , um das Modell zu trainieren. Aber wie stellen Sie die Werte für die Hyperparameter ein? Dafür ist das Validierungsset gedacht. Sie können es verwenden, um die Leistung Ihres Modells für verschiedene Kombinationen von Hyperparameterwerten zu bewerten (z. B. mithilfe eines Rastersuchprozesses) und das am besten trainierte Modell zu behalten.
Aber wie vergleicht Ihr ausgewähltes Modell mit anderen Modellen? Ist Ihr neuronales Netzwerk leistungsfähiger als beispielsweise ein zufälliger Wald, der mit der gleichen Kombination von Trainings- / Testdaten trainiert wurde? Sie können nicht anhand des Validierungssatzes vergleichen, da dieser Validierungssatz Teil der Anpassung Ihres Modells war. Sie haben damit die Hyperparameterwerte ausgewählt!
Mit dem Testset können Sie verschiedene Modelle auf unvoreingenommene Weise vergleichen, indem Sie Ihre Vergleiche auf Daten stützen, die in keinem Teil Ihres Trainings- / Hyperparameter-Auswahlprozesses verwendet wurden.
quelle
Der Testsatz und der Kreuzvalidierungssatz haben unterschiedliche Zwecke. Wenn Sie eine fallen lassen, verlieren Sie ihre Vorteile:
Das Kreuzvalidierungsset wird verwendet, um Überanpassung zu erkennen und die Suche nach Hyperparametern zu unterstützen.
Mit dem Testset wird die Leistung des Modells gemessen.
Sie können das Kreuzvalidierungsset nicht verwenden, um die Leistung Ihres Modells genau zu messen, da Sie Ihre Ergebnisse absichtlich optimieren , um die bestmögliche Metrik zu erhalten, möglicherweise über Hunderte von Variationen Ihrer Parameter. Das Kreuzvalidierungsergebnis dürfte daher zu optimistisch sein.
Aus dem gleichen Grund können Sie das Kreuzvalidierungsset nicht verwerfen und das Testset nicht zur Auswahl von Hyperparametern verwenden, da Sie so gut wie garantiert überschätzen, wie gut Ihr Modell ist. In der idealen Welt verwenden Sie das Test-Set nur einmal oder "neutral", um verschiedene Experimente zu vergleichen.
Wenn Sie eine Kreuzvalidierung durchführen, das beste Modell finden und dann die Testdaten zum Trainieren hinzufügen, ist es möglich (und in einigen Situationen möglicherweise sehr wahrscheinlich), dass Ihr Modell verbessert wird. Sie können jedoch nicht sicher sein, ob dies tatsächlich geschehen ist, und selbst wenn dies der Fall ist, haben Sie keine unvoreingenommene Einschätzung der neuen Leistung.
Ich habe viele Kaggle-Wettbewerbe miterlebt und habe die Erfahrung gemacht, dass es eine echte Sache ist, sich auf das Test-Set einzustellen, indem man es überbeansprucht. Es gibt oft eine Gruppe von Wettbewerbern, die die öffentliche Rangliste erklommen und im Test ihr bestes Modell ausgewählt haben (die öffentliche Rangliste ist im Grunde genommen ein Testsatz), während sie bei der Kreuzvalidierung nicht ganz so gründlich sind. . . Diese Wettbewerber fallen aus der Rangliste heraus, wenn am Ende ein neues Test-Set eingeführt wird.
Ein sinnvoller Ansatz besteht darin, Daten (train + cv) erneut zu verwenden, um sie vor dem Testen mit den gefundenen Hyperparametern zu trainieren. Auf diese Weise können Sie mehr Daten trainieren und erhalten am Ende dennoch ein unabhängiges Maß für die Leistung.
Wenn Sie mehr aus der Kreuzvalidierung herausholen möchten, ist der übliche Ansatz die k-fache Kreuzvalidierung . Ein häufiger Trick bei Kaggle-Wettbewerben ist die Verwendung der k-fachen Kreuzvalidierung. Anstatt die Daten erneut zu einem größeren Trainingssatz (Zug + Lebenslauf) zu kombinieren, werden die Lebenslaufergebnisse zu einem Metamodell zusammengefasst oder gestapelt.
Überprüfen Sie abschließend immer, ob Ihre Aufteilungen für die Validierung und den Test gegenüber einer möglichen Korrelation innerhalb Ihres Datensatzes stabil sind.
quelle