Warum nicht das endgültige Modell auf die gesamten Daten trainieren, nachdem Hyper-Paramaeter-Tuning-Basis-Testdaten und Modellauswahl-Basis-Validierungsdaten durchgeführt wurden?


9

Mit ganzen Daten meine ich Zug + Test + Validierung

Wenn ich meinen Hyperparameter anhand der Validierungsdaten festgelegt und das Modell anhand der Testdaten ausgewählt habe, ist es nicht besser, ein Modell für die gesamten Daten zu trainieren, damit die Parameter besser trainiert werden, als das Modell nur für die Daten zu trainieren Zugdaten


2
Sie sollten Ihre Hyperparameter NIEMALS anhand Ihrer Testdaten korrigieren. Sie haben gerade Ihr gesamtes Experiment verdorben, indem Sie Ihre blinde Kontrollgruppe (Testset) entfernt haben.
JahKnows

@JahKnows Nachdem ich mit dem Optimieren der Hyperparameter für ein Modell fertig bin, verstehe ich den Schaden nicht, außer dass ich nicht weiß, wie gut es über einen anderen Datensatz verallgemeinert wird. Wie habe ich mein Experiment verdorben? vermisse ich etwas
Apoorva Abhishekh

Antworten:


8

Die Frage steht unter einer falschen Annahme. Viele Menschen tun, was Sie sagen, dass sie "nicht können".

In der Tat, die Rastersuche tut Implementierung in dem weit verbreiteten sklearn Paket genau das. Es sei denn refit=False, das endgültige Modell wird unter Verwendung der gesamten Daten neu trainiert.

Ich denke, für einige Hyperparameter ist dies möglicherweise nicht sehr wünschenswert, da sie relativ zum Datenvolumen sind. Betrachten Sie beispielsweise die min_samples_leafVorbeschneidungstaktik für einen Entscheidungsbaum . Wenn Sie über mehr Daten verfügen, wird die Vorbereinigung möglicherweise nicht wie gewünscht ausgeführt.

Aber auch hier trainieren die meisten Menschen nach der Kreuzvalidierung die gesamten Daten neu, damit sie das bestmögliche Modell erhalten.

Nachtrag: @NeilSlater sagt weiter unten, dass einige Leute zusätzlich zum Lebenslauf einen Hold-out durchführen. Mit anderen Worten, sie haben eine Aufteilung des Zugtests und führen dann eine Modellauswahl für das Training durch. Ihm zufolge trainieren sie mit dem ursprünglichen Trainingssatz, aber nicht mit dem Testsatz. Der Testsatz wird dann verwendet, um eine endgültige Modellschätzung durchzuführen. Persönlich sehe ich drei Mängel: (a) Es löst nicht das Problem, das ich erwähnt habe, da einige Hyperparameter vom Trainingsvolumen abhängen, da Sie sowieso neu trainieren. (B) Wenn Sie viele Modelle testen, bevorzuge ich anspruchsvollere Methoden wie verschachtelte Kreuzvalidierung, damit keine Daten verschwendet werden, und (c) Hold-out ist eine schreckliche Methode, um zu schließen, wie sich ein Modell verallgemeinert, wenn Sie nur wenige Daten haben.


Bei dieser Funktion geht es um die Wiederverwendung der Kreuzvalidierung. Es ist jedoch immer noch nicht ratsam, die Testdaten wiederzuverwenden, da Sie nur Annahmen aus der Kreuzvalidierung und kein Leistungsmaß haben. Jeder Fehler oder Problemparameter (wie das von Ihnen angegebene Beispiel) könnte das Modell ansonsten unerkennbar verschlechtern.
Neil Slater

@NeilSlater Ich verstehe nicht, was Sie hier gesagt haben: "Die Funktion ist über die Wiederverwendung der Kreuzvalidierung"
Ricardo Cruz

"feature" -> die refitOption der GridSearchCV-Funktion. Es passt nicht wieder dazu, durchgehaltene Testdaten einzuschließen (diese Daten werden nicht einmal angezeigt).
Neil Slater

@NeilSlater, Sie können den Code leicht selbst überprüfen, wenn Sie mir nicht glauben (hier) . Wenn refit = True, dann "passen Sie den besten Schätzer unter Verwendung des gesamten Datensatzes an".
Ricardo Cruz

1
@NeilSlater, das ist nicht meine Erfahrung, aber ich habe Ihre Erfahrung zu meinem Kommentar hinzugefügt, damit andere davon profitieren können. Danke.
Ricardo Cruz

1

Ja, du kannst.

Da Testdaten aus einer ähnlichen Verteilung stammen sollen, um Daten zu trainieren, werden Sie Ihr Modell nicht beschädigen. Wenn Sie das Modell richtig trainiert haben, werden Sie keine signifikanten Änderungen feststellen (außer einer besseren Genauigkeitsmetrik für frühere Test- / Validierungsdaten).

Es ist jedoch selten der Fall, dass Testdaten aus genau derselben Verteilung stammen wie Zugdaten. In einem realen Anwendungsfall erhalten Sie möglicherweise eine bessere Generalisierbarkeit Ihres Modells.


1
Das Problem beim Einschließen der Testdaten gemäß diesem Vorschlag besteht darin, dass Sie jetzt nicht mehr messen können, wie gut sich das Modell verallgemeinert. Ja, Sie könnten erwarten, dass es besser verallgemeinert wird. Sie wissen es jedoch nicht , da Sie Ihre Fähigkeit zur Messung entfernt haben. Ich schlage vor, diese Einschränkung hinzuzufügen und zu erklären, warum dies manchmal immer noch in Ordnung ist (z. B. wenn Sie neue Daten erhalten, können Sie dies möglicherweise als neuen Testsatz behandeln und im Laufe der Zeit eine neue Messung aufbauen, während Sie hoffentlich das bessere Modell nutzen - Es ist jedoch ein Risiko)
Neil Slater

@NeilSlater: Ich verstehe, dass ich meine Fähigkeit, zu messen, wie gut es auf einem anderen Datensatz verallgemeinert wird, entfernt habe. Aber wenn ich sowohl Test als auch Holdout habe, kann ich mein Modell auch nach dem Einstellen der Hyperparameter wieder auf Train + Test trainieren. Ich werde immer noch Holdout haben, um zu überprüfen, wie sich mein Modell verallgemeinert. Ich weiß, das ist anders als das, was ich gefragt habe. Aber ich möchte nur Ihre Ansicht wissen.
Apoorva Abhishekh

1
@ApoorvaAbhishekh: Wenn Sie noch einen anderen Holdout-Datensatz hatten, können Sie diesen als neuen Testsatz für das neue Modell verwenden, das auf new_train = {alter Zug, alter Lebenslauf, alter Test} trainiert wurde. Dann würden Sie ein gewisses Maß an Verallgemeinerung erhalten. Obwohl Sie darauf achten müssen, es nicht zu stark zu verwenden - wenn sich herausstellt, dass ein Problem mit dem neuen kombinierten Satz vorliegt (z. B. muss sich das vorzeitige Stoppen aufgrund weiterer Daten ändern), können Sie es nicht auch als neuen Lebenslaufsatz verwenden. . . es sei denn, Sie haben noch einen anderen Holdout in Reserve. . .
Neil Slater

@NeilSlater Theoretisch benötigen Sie einen neuen Datensatz, um die Leistung zu ermitteln. In der Praxis können Sie sicher sein, dass Ihr Modell eine gute Leistung erbringt, da Sie lange Zeit damit gearbeitet haben und wissen, was Sie erwartet. Normalerweise verfügen Sie jedoch auch über andere Daten, um die Leistung eines Modells zu überprüfen, z. B. in Computer Vision - unbeschriftete Daten. Es ist nicht richtig, aber es funktioniert auch. Sicher ist es ein extremer Fall, aber ich möchte sagen, dass es funktionieren könnte. Ich selbst habe immer ein Test-Set, das ich nicht in das Training mische.
Il'ya Zhenin

1

Die Antwort auf diese Frage hängt vom verwendeten Trainingsalgorithmus (Technologie) ab. Zum Beispiel habe ich einige Ansätze in der Ensemble-Klassifizierung gesehen, bei denen am Ende Trainings- und Validierungssätze (aber keine Testsätze) kombiniert werden. Es ist sehr wichtig zu wissen, dass sogar die Validierung hauptsächlich zur Entscheidung der Hyperparameter verwendet wird. Einige dieser Hyperparameter können eine Funktion der für das Training verwendeten Daten sein. Bei der DNN-Validierung, die verwendet wurde, um zu wissen, wann zu stoppen ist, müssen wir wissen, wann zu stoppen ist, da eine Überanpassung auftreten kann, wenn die Parameter (Gewichte) des Netzwerks ständig angepasst werden. Ohne das Validierungsset gehen Sie blind im Trainingsprozess. Wenn Sie jedoch genau die gleiche Anzahl von Iterationen wie zuvor angegeben verwenden, besteht eine hohe Wahrscheinlichkeit, dass Sie von diesen zusätzlichen Beispielen nicht profitieren. Der Testsatz sollte überhaupt nicht berührt werden, wie oben angegeben. Ohne den Testsatz haben Sie keine Methode zur Bewertung Ihres Modells. Dies ist ein Glücksspiel. Sie können KEIN Modell oder keine Lösung liefern, ohne die Genauigkeit der tatsächlichen Datenverteilung (die durch die Testdaten dargestellt wird) abzuschätzen.


Ich meinte nach dem Training auf Zugdaten, Hyperparameter-Tuning auf Validierungsdaten und Auswahl der Modellbasis die Testdaten, Kann ich meine Modellbasis die gesamten Daten trainieren. Oder kann ich die Trainingsdaten und Validierungsdaten kombinieren, nachdem ich mit der Hyperparameter-Abstimmung fertig bin, und die Genauigkeit anhand der Testdaten abschätzen? Entschuldigung für das falsche Schreiben. Habe es jetzt korrigiert.
Apoorva Abhishekh
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.