In einigen Vorlesungen und Tutorials, die ich gesehen habe, wird vorgeschlagen, Ihre Daten in drei Teile aufzuteilen: Schulung, Validierung und Test. Es ist jedoch nicht klar, wie der Testdatensatz verwendet werden soll und wie dieser Ansatz besser ist als eine Kreuzvalidierung über den gesamten Datensatz.
Nehmen wir an, wir haben 20% unserer Daten als Testsatz gespeichert. Dann nehmen wir den Rest, teilen ihn in k-Faltungen auf und ermitteln mithilfe der Kreuzvalidierung das Modell, das die beste Vorhersage für unbekannte Daten aus diesem Datensatz liefert. Nehmen wir an, das beste Modell, das wir gefunden haben, liefert eine Genauigkeit von 75% .
Verschiedene Tutorials und viele Fragen auf verschiedenen Q & A-Websites besagen, dass wir unser Modell jetzt anhand eines gespeicherten (Test-) Datensatzes verifizieren können. Aber ich kann immer noch nicht verstehen, wie genau es gemacht wird und worum es geht.
Nehmen wir an, wir haben eine Genauigkeit von 70% im Testdatensatz. Also, was machen wir als nächstes? Versuchen wir es mit einem anderen Modell und dann mit einem anderen, bis wir einen Highscore für unseren Testdatensatz erhalten? In diesem Fall sehen wir jedoch so aus, als würden wir nur das Modell finden, das zu unserem begrenzten (nur 20%) Test-Set passt . Dies bedeutet nicht, dass wir das Modell finden, das im Allgemeinen am besten ist.
Darüber hinaus , wie können wir diese Partitur als eine allgemeine Bewertung des Modells betrachten, wenn es nur auf eine begrenzte Datenmenge berechnet wird? Wenn diese Punktzahl niedrig ist, hatten wir möglicherweise Pech und wählten "schlechte" Testdaten aus.
Wenn wir dagegen alle uns vorliegenden Daten verwenden und dann das Modell mithilfe der k-fachen Kreuzvalidierung auswählen, finden wir das Modell, das die beste Vorhersage für unbekannte Daten aus dem gesamten uns vorliegenden Datensatz liefert.
Antworten:
Dies ähnelt einer anderen Frage, die ich in Bezug auf beantwortet habe Kreuzvalidierung und Testsätzen . Das Schlüsselkonzept, das hier zu verstehen ist, sind unabhängige Datensätze . Stellen Sie sich nur zwei Szenarien vor:
Nun, wenn ich ein Forscher bin, der nicht so glücklich ist, was mache ich dann? Nun, Sie können versuchen, genau dieses Szenario nachzuahmen:
Um auf Ihre anderen Bedenken einzugehen:
Die Idee ist, dass Sie das bestmögliche Modell aus Ihren Daten erstellen und es dann anhand weiterer Daten auswerten, die es noch nie zuvor gesehen hat. Sie können Ihr Kreuzvalidierungsschema neu bewerten, aber sobald Sie ein abgestimmtes Modell (dh Hyperparameter) haben, arbeiten Sie mit diesem Modell weiter, weil es das Beste war, das Sie machen konnten. Der Schlüssel ist, NIEMALS IHRE TESTDATEN ZUM ABSTIMMEN ZU VERWENDEN . Ihr Ergebnis aus den Testdaten ist die Leistung Ihres Modells in Bezug auf "allgemeine" Daten. Das Replizieren dieses Prozesses würde die Unabhängigkeit der Datensätze aufheben (worauf es ankam). Dies wird auch in einer anderen Frage zu Test- / Validierungsdaten angesprochen .
Dies ist unwahrscheinlich, wenn Sie Ihre Daten korrekt aufgeteilt haben. Sie sollten Ihre Daten nach dem Zufallsprinzip aufteilen (auch wenn sie möglicherweise für den Klassenausgleich geschichtet sind). Wenn Ihr Dataset groß genug ist, um Ihre Daten in drei Teile aufzuteilen, sollte Ihr Test-Subset so groß sein, dass die Wahrscheinlichkeit sehr gering ist, dass Sie gerade schlechte Daten ausgewählt haben. Es ist wahrscheinlicher, dass Ihr Modell überarbeitet wurde.
quelle
Wenn Sie lediglich ein Modell mit Standardeinstellungen für das unformatierte oder minimal vorverarbeitete Dataset trainieren möchten (z. B. One-Hot-Codierung und / oder Entfernen von NAs), benötigen Sie kein separates Test-Set. Sie können einfach Ihr Modell trainieren Trainieren Sie das Set und testen Sie es an Ihrem Validierungsset, oder noch besser, trainieren Sie das gesamte Set mithilfe der Kreuzvalidierung, um Ihre Leistung abzuschätzen.
Sobald Sie jedoch aufgrund Ihrer Kenntnis der Daten Änderungen an Ihrer ursprünglichen Strategie vorgenommen haben, haben Sie Ihr Ergebnis "verdorben". Einige Beispiele sind:
Modellauswahl: Sie haben Logistik-, Lasso-, Random Forest-, XGBoost- und Support-Vektor-Maschinen getestet und das beste Modell ausgewählt
Parametertuning: Sie haben einen XGBoost optimiert, um die optimalen Hyperparameter zu finden
Featureauswahl: Sie haben mit Rückwärtsauswahl, genetischem Algorithmus, Boruta usw. eine optimale Teilmenge von Features ausgewählt, die in Ihr Modell aufgenommen werden sollen
Fehlende Imputation: Sie haben fehlende Variablen mit dem Mittelwert oder mit einem einfachen Modell, das auf den anderen Variablen basiert, unterstellt
Feature-Transformation: Sie haben Ihre numerischen Variablen zentriert und skaliert, um sie durch einen Z-Score (Anzahl der Standardabweichungen vom Mittelwert) zu ersetzen.
In allen oben genannten Fällen liefert die Verwendung eines einzelnen Holdout-Sets oder sogar eine Kreuzvalidierung keine realistische Schätzung der tatsächlichen Leistung, da Sie Informationen verwenden, die Sie bei Ihrer Entscheidung nicht über zukünftige Daten verfügen. Stattdessen wählen Sie das beste Modell, die besten Hyperparameter, den besten Funktionsumfang usw. für Ihre Daten aus, und es ist wahrscheinlich, dass Sie Ihre Strategie leicht an Ihre Daten anpassen. Um eine ehrliche Schätzung der tatsächlichen Leistung zu erhalten, müssen Sie diese anhand von Daten bewerten, die überhaupt nicht in den Entscheidungsprozess eingegangen sind. Daher wird üblicherweise ein unabhängiger Testsatz verwendet, der von Ihrem Training (Modellierung) und Ihrer Validierung ( Auswahl eines Modells, Features, Hyperparameters usw.).
Alternativ zum Anhalten eines Testsatzes können Sie stattdessen eine Technik verwenden, die als verschachtelte Kreuzvalidierung bezeichnet wird. Dies erfordert, dass Sie Ihre gesamte Modellierungsstrategie (Transformation, Imputation, Feature-Auswahl, Modellauswahl, Hyperparameter-Optimierung) als nicht parametrische Funktion codieren und dann eine Kreuzvalidierung für diese gesamte Funktion durchführen, als wäre es einfach eine Modellanpassungsfunktion. Dies ist in den meisten ML-Paketen schwierig zu tun, kann aber mit dem mlr-Paket recht einfach in R implementiert werden, indem Sie Wrapper verwenden, um Ihre Trainingsstrategie zu definieren, und dann Ihren eingepackten Lerner erneut abtasten:
https://mlr.mlr-org.com/articles/tutorial/nested_resampling.html
quelle
Ich gehe davon aus, dass Sie eine Klassifizierung durchführen.
Nehmen Sie Ihre Daten und teilen Sie sie zu 70/30 in trainingData / testData-Teilmengen auf. Nehmen Sie die Teilmenge trainingData und teilen Sie sie erneut in die Teilmengen trainingData / validateData auf. Jetzt haben Sie 3 Teilmengen Ihrer ursprünglichen Daten - trainingData (.7 * .7), validateData (.7 * .3) und testData (.3).
Sie trainieren Ihr Modell mit trainingData. Anschließend überprüfen Sie die Leistung des Modells mithilfe von validateData, das wir als unabhängig von trainingData betrachten können, und geben daher eine gute Einschätzung darüber ab, wie gut das Modell verallgemeinert ist. Nehmen wir an, Sie erreichen eine Genauigkeit von 75%.
Jetzt trainieren Sie Ihr Modell beliebig oft neu. Bei jeder Umschulung bewerten Sie einen anderen Satz von Hyperparametern (die Parameter, die in erster Linie Ihrem Modell zugeführt werden, im Vergleich zu denen, für die Ihr Modell optimiert ist), verwenden jedoch weiterhin den Teilsatz "trainingData". Bei jeder Umschulung überprüfen Sie außerdem erneut, wie gut sich das neue Modell verallgemeinert, indem Sie die Leistung von validateData überprüfen.
Nachdem Sie jede Kombination von Hyperparametern überprüft haben, die Sie bewerten möchten, wählen Sie den Satz von Hyperparametern aus, mit dem Sie bei validateData die beste Leistung erzielt haben. Nehmen wir an, Ihre beste Leistung bei validateData lag bei einer Genauigkeit von 80%. Dies sind Ihre endgültigen Hyperparameter, und das von diesen Hyperparametern definierte Modell wird für diesen nächsten Schritt verwendet.
Nun nehmen Sie das Modell, das Ihre endgültigen Hyperparameter verwendet, und werten testData aus. Dies ist das erste Mal seit Beginn dieses Prozesses, dass testData berührt wurde! Wenn Sie eine Leistung von testData erhalten, die mit Ihrer Leistung von validateData vergleichbar ist (obwohl diese normalerweise etwas geringer ist), können Sie sicher sein, dass Ihr Modell wie erwartet funktioniert und sich gut verallgemeinert! In diesem Fall ist dies Ihr endgültiges Modell!
Warum das alles? Sie versuchen, eine Überanpassung zu vermeiden. Es besteht immer die Gefahr, dass Sie die Daten, die Sie beim Trainieren und Optimieren Ihres Modells verwenden, zu stark anpassen. Wenn Sie mit nur einem Datensatz trainieren, optimieren (validieren) und testen, besteht eine gute Chance, dass Sie diese Daten überanpassen und sie nicht verallgemeinern. Indem Sie Trainings- und Testdatensätze aufteilen (und davon ausgehen, dass Sie die Testdaten verwenden), haben Sie die Möglichkeit, sich selbst intern zu überprüfen, aber es besteht immer noch die Möglichkeit, dass Sie die Testdaten nur überanpassen. Aus diesem Grund brechen wir einen dritten Datensatz auf, validieren ihn, damit wir uns intern aufrichtig halten können. Das Optimieren mit validateData verhindert, dass wir zu trainingData überanpassen. Das abschließende Testen mit testData verhindert, dass wir übermäßig an validateData anpassen.
quelle
Betrachten wir es folgendermaßen
Gang und gäbe sein
a) Trainingsdaten - werden zur Auswahl der Modellparameter verwendet.
b) Validierungsdaten - werden zur Auswahl von Hyperparametern verwendet.
c) Testdaten - werden verwendet, um das Vertrauen in die Ausgabe der beiden obigen Schritte zu gewinnen
Eine andere Sichtweise auf Teil 1
a) Unser Modellkandidatenpool ist eine 5-Dimenson-Menge, dh
b) In Schritt 1a werden die Modellkandidaten von 5-dimensional auf 1-dimensional reduziert.
c) In Schritt 1b werden Modellkandidaten von 1-Dimension auf 0-Dimension reduziert, was ein einzelnes Modell ist.
d) Möglicherweise ist das OP jedoch der Ansicht, dass die obige „endgültige“ Ausgabe im Testdatensatz nicht gut genug funktioniert, und wiederholt daher den gesamten Prozess erneut, z. Dann wird der Testdatensatz mehrmals verwendet, und daher kann das Rauschen in diesen Daten zu einer gewissen Überanpassung bei der Entscheidung führen, ob eine lineare Regression oder eine Kammregression verwendet wird.
e) Um mit einem hochdimensionalen Modellpool mit Parametern, Hyperparametern, Modelltypen und Vorverarbeitungsmethoden umzugehen, definiert jede Aufteilung der uns zur Verfügung stehenden Daten im Wesentlichen einen Entscheidungsprozess, der
Schlussfolgerung und Antworten auf die Frage von OP
a) Bei Two-Split (Training und Test), Three-Split (Training, Validierung und Test) oder einer höheren Split-Anzahl geht es im Wesentlichen um die Reduzierung der Dimensionalität und die Zuordnung der Daten (insbesondere Rauschen und das Risiko einer Überanpassung).
b) Irgendwann können Sie einen „endgültigen“ Modellkandidatenpool erstellen und sich dann überlegen, wie Sie den Prozess der sequenziellen Reduzierung der Dimension so gestalten können, dass
c) Was ist, wenn Sie nicht erreichen können? b
quelle