Ist es immer besser, den gesamten Datensatz zum Trainieren des endgültigen Modells zu verwenden?


24

Eine übliche Technik nach dem Training, der Validierung und dem Testen des bevorzugten Modells für maschinelles Lernen besteht darin, den gesamten Datensatz einschließlich der Testuntermenge zu verwenden, um ein endgültiges Modell für die Bereitstellung zu trainieren , z. B. für ein Produkt.

Meine Frage ist: Ist es immer das Beste, das zu tun? Was ist, wenn sich die Leistung tatsächlich verschlechtert?

Nehmen wir zum Beispiel einen Fall an, in dem das Modell bei der Klassifizierung der Testteilmenge einen Wert von etwa 65% aufweist. Dies kann bedeuten, dass entweder das Modell nicht ausreichend trainiert ist oder dass die Test-Teilmenge aus Ausreißern besteht. Im letzteren Fall würde das Training des endgültigen Modells mit diesen die Leistung verringern, und Sie finden es erst heraus, nachdem Sie es bereitgestellt haben.

Meine ursprüngliche Frage umformulieren:

Wenn Sie einmalig ein Modell demonstrieren würden , z. B. in einem teuren Raketenexperiment mit eingebetteter Elektronik, würden Sie einem Modell vertrauen, das im letzten Schritt mit der Test-Teilmenge neu trainiert wurde, ohne es erneut zu testen. auf seine neue Leistung getestet?

Antworten:


14

Sobald Sie optimale Hyperparameter für Ihr Modell erhalten haben, können Sie nach dem Training, der Kreuzvalidierung usw. theoretisch das Modell auf den gesamten Datensatz trainieren, um ihn für die Produktion bereitzustellen. Dies wird theoretisch besser verallgemeinern.

Sie können jedoch keine statistischen / Leistungsangaben mehr zu Testdaten machen, da Sie keinen Testdatensatz mehr haben.

Wenn Sie ein Modell unter Verwendung des gesamten Trainingsdatensatzes für die Produktion bereitstellen und die wahren Werte der Zielvariablen der neu eingehenden Daten kennen (dh die Daten, für die das Produktionsmodell Vorhersagen erstellt), können Sie Leistungsmetriken in Echtzeit wie folgt berechnen Diese neuen Daten sind wie Testdaten (sie waren während des Trainings für das Modell nicht sichtbar). Durch diesen Vorgang können Sie die Hyperparameter des Modells aktualisieren, um eine bessere Leistung zu erzielen.

Aber wenn Sie die Zielwerte neuer Daten kennen, warum sollten Sie dann überhaupt ein Modell trainieren?

Im Allgemeinen würde ich sagen, wenn Sie über genügend Daten mit ausreichender Vielfalt verfügen, dann sollten Sie das 80: 20-Training mischen und aufteilen: Der Test sollte ausreichen, um ein robustes Modell zu trainieren, und sich nicht um Verallgemeinerungsprobleme kümmern müssen (vorausgesetzt natürlich, Sie regulieren das Modell).


+1, danke für die Antwort! Es scheint, als würde eine zufällige Vermischung des Datensatzes vor der Aufteilung in 80/20 wahrscheinlich dazu führen, dass wir uns "statistisch" sicher fühlen (:
pcko1

2
Die Leistung Ihres durchgehaltenen Test-Sets soll sich auf die gesamte Population beziehen, solange Sie es richtig gemacht haben. Obwohl Sie keinen Testsatz haben, nachdem Sie Ihre Methode auf den gesamten Datensatz angewendet haben, ist die Leistung Ihrer ursprünglichen quervalidierten Zug- / Testsätze ein unvoreingenommener Schätzer für die Leistung Ihres Trainingsalgorithmus. Das ist der springende Punkt im Lebenslauf - nicht ein Modell zu trainieren oder zu parametrisieren, sondern die Leistung des Modellbildungsprozesses abzuschätzen. Ihre Leistung auf allen Testsätzen vor der Volldatenmodellierung ist Ihre Leistungsschätzung für die Volldaten.
Nuclear Wang

13

Interessante Frage. Ich persönlich habe das für Produkte, die in Produktion gehen, nicht gesehen, aber ich verstehe die Logik.

Je mehr Daten Ihr bereitgestelltes Modell gesehen hat, desto besser sollte theoretisch die Verallgemeinerung sein. Wenn Sie also das Modell auf den gesamten verfügbaren Datensatz trainiert haben, sollte es allgemeiner sein als ein Modell, das nur beispielsweise Zug- / Wertsätze (z. B. ~ 90%) aus dem gesamten Datensatz sah.

Das Problem dabei (und der Grund, warum wir Daten in Train / Val / Test Sets aufteilen!) Ist, dass wir statistische Aussagen über die Genauigkeit von unsichtbaren Daten machen möchten. Sobald wir ein Modell für alle Daten erneut trainieren , können solche Ansprüche nicht mehr geltend gemacht werden.

[Bearbeiten]

Hier ist eine verwandte Frage zu Cross-Validated , in der die akzeptierte Antwort ähnliche Aussagen zu mir macht und andere Möglichkeiten aufzeigt, Dinge zu tun.


Wir durchlaufen:

  1. ein Modell trainieren
  2. Modell wechseln
  3. Fahren Sie mit Schritt 1 fort
  4. Bewertung der Leistung am Testgerät
  5. Präsentieren Sie das Modell mit der in Schritt 5 gefundenen Testgenauigkeit

Wenn es Ihnen gelingt, eine gute Punktzahl für das Test-Set zu erzielen, können Sie behaupten, dass es sich gut verallgemeinert. Die Frage, ob das erneute Trainieren des gesamten Datensatzes die Leistung bei zukünftigen unsichtbaren Daten verbessern wird, können Sie also nicht unbedingt testen. Der empirische Nachweis einer besseren Leistung in anderen verwandten Problembereichen ist die einzige Quelle oder Anleitung zu dem Zeitpunkt, zu dem Sie die Entscheidung treffen müssen.

Eine Plausibilitätsprüfung würde darin bestehen, das endgültige, neu trainierte Modell erneut mit dem Original-Test-Set zu testen. Erwarten Sie, dass es mehr Punkte erzielt als jemals zuvor, wenn das Modell nur den Zug / das Val-Set gesehen hat, weil es das Test-Set während des Trainings tatsächlich gesehen hat. Dies würde mich nicht zu 100% zuversichtlich machen, dass dieses endgültige Modell in allen zukünftigen Fällen überlegen ist, aber zumindest ist es so gut, wie es mit den gegebenen Daten sein kann.

Vielleicht gibt es strengere Argumente gegen das, was Sie sagen (wahrscheinlich akademisch motiviert), aber es scheint für praktische Anwendungen ansprechend zu sein!


+1, danke für deine Mühe und für den Hinweis auf diesen Beitrag, ich habe ihn verpasst! Was Ihren Vorschlag betrifft, das Modell am Ende auf dem gesamten Trainingsdatensatz zu testen, so erhalten Sie meines Erachtens durch das Ergebnis keinen wertvollen Einblick. Nur weil das Algorithmus-Training normalerweise auf der Optimierung von Kostenfunktionen basiert, ist das trainierte Modell angesichts der Trainingsdaten optimal. Eine geringe Genauigkeit der Zugdaten bedeutet nicht, dass sie nicht optimal sind, sondern dass sie angesichts des Datensatzes und der ausgewählten Algorithmusarchitektur einfach nicht besser sind. Daraus können Sie nichts für ihre äußere Gültigkeit schließen.
Pcko1

1
Bitte! Ich stimme Ihrer Aussage voll und ganz zu (obwohl ich gesagt habe, dass ich das endgültig trainierte Modell anhand der Herkunftstestdaten testen soll , nicht anhand des Trainings). Auf jeden Fall würde ich immer noch sehen wollen, dass das endgültige Modell nichts völlig Unerwartetes getan hat. Theorie und Praxis stimmen nicht immer
überein

6

Ein Punkt, der beim statistischen maschinellen Lernen hervorgehoben werden muss, ist, dass es keine Garantien gibt . Wenn Sie die Leistung anhand eines durchgehaltenen Satzes schätzen , handelt es sich lediglich um eine Schätzung . Schätzungen können falsch sein.

Das ist gewöhnungsbedürftig, aber es ist etwas, mit dem Sie sich vertraut machen müssen. Wenn Sie sagen "Was ist, wenn sich die Leistung tatsächlich verschlechtert?", Ist die Antwort sicher, dass dies passieren könnte. Die tatsächliche Leistung könnte schlechter sein als Sie geschätzt / vorhergesagt haben. Es könnte auch besser sein. Beides ist möglich. Das ist unvermeidlich. Es gibt einige inhärente, nicht reduzierbare Unsicherheiten.

Wenn Sie die Leistung mit einem durchgehaltenen Testsatz bewerten, verwenden Sie Daten aus der Vergangenheit, um die zukünftige Leistung vorherzusagen. Die Wertentwicklung in der Vergangenheit ist keine Garantie für zukünftige Ergebnisse . Dies ist eine Tatsache des Lebens, die wir einfach akzeptieren müssen.

Sie können nicht zulassen, dass dies Sie bewegungsunfähig macht. Die Tatsache, dass es möglich ist, eine schlechtere Leistung zu erbringen, als Sie vorhergesagt haben, ist kein Grund, die Bereitstellung eines auf den Daten geschulten Modells für die Produktion zu vermeiden. Insbesondere ist es auch möglich, schlecht zu machen, wenn Sie das nicht tun. Es ist möglich, dass ein Modell, das mit allen Daten trainiert wurde (Zug + Validierung + Test), schlechter ist als ein Modell, das nur mit dem Zug + Validierungsteil trainiert wurde. Es ist auch möglich, dass es besser wird. Anstatt also nach einer Garantie zu suchen, müssen wir uns fragen: Was gibt uns die besten Erfolgschancen? Was ist am wahrscheinlichsten am effektivsten?

In diesem Fall können Sie zur Bereitstellung in der Produktion am besten alle verfügbaren Daten verwenden. In Bezug auf die erwartete Leistung ist die Verwendung aller Daten nicht schlechter als die Verwendung einiger Daten und möglicherweise besser. Sie können also genauso gut alle verfügbaren Daten verwenden, um das Modell beim Erstellen des Produktionsmodells zu trainieren. Die Dinge können immer noch schlecht laufen - es ist immer möglich, Pech zu haben, wenn Sie statistische Methoden anwenden - aber dies gibt Ihnen die bestmögliche Chance, dass die Dinge gut laufen.

Insbesondere ist die Standardpraxis wie folgt:

  1. Reservieren Sie einige Ihrer Daten in einem ausgedehnten Test-Set. Es gibt keine feste Regel, welche Fraktion verwendet werden soll. Sie können jedoch beispielsweise 20% für das Testset reservieren und die verbleibenden 80% für Training und Validierung behalten. Normalerweise sollten alle Aufteilungen zufällig sein.

  2. Verwenden Sie als Nächstes die Trainings- und Validierungsdaten, um mehrere Architekturen und Hyperparameter auszuprobieren und experimentieren Sie, um das bestmögliche Modell zu finden. Nehmen Sie die 80%, die für das Training und die Validierung zurückbehalten werden, und teilen Sie sie in einen Trainingssatz und einen Validierungssatz auf. Trainieren Sie ein Modell mit dem Trainingssatz und messen Sie dann dessen Genauigkeit anhand des Validierungssatzes. Wenn Sie die Kreuzvalidierung verwenden, werden Sie diese Aufteilung mehrmals durchführen und die Ergebnisse für den Validierungssatz mitteln. Wenn dies nicht der Fall ist, führen Sie eine einzelne Aufteilung durch (z. B. eine 70% / 30% -Aufteilung der 80% oder ähnliches) und bewerten die Leistung des Validierungssatzes. Wenn Sie viele Hyperparameter ausprobieren möchten, tun Sie dies einmal für jede mögliche Einstellung von Hyperparametern. Wenn Sie viele Architekturen ausprobieren möchten, tun Sie dies für jede Kandidatenarchitektur. Sie können dies iterieren, indem Sie verwenden, was Sie '

  3. Sobald Sie zufrieden sind, frieren Sie die Auswahl von Architektur, Hyperparametern usw. ein. Jetzt sind Ihre Experimente abgeschlossen. Sobald Sie diesen Punkt erreicht haben, können Sie nie wieder andere Optionen ausprobieren (ohne einen neuen Testsatz zu erhalten). Treffen Sie diesen Punkt also erst, wenn Sie sicher sind, dass Sie bereit sind.

  4. Wenn Sie bereit sind, trainieren Sie ein Modell mit dem vollständigen Trainings- + Validierungssatz (dieser 80%) unter Verwendung der zuvor ausgewählten Architektur und Hyperparameter. Messen Sie dann die Genauigkeit mit dem ausgestreckten Testgerät. Dies ist Ihre Schätzung / Prognose für die Genauigkeit dieses Modellierungsansatzes. Sie erhalten hier eine einzelne Nummer. Diese Zahl ist das, was es ist: Wenn Sie nicht zufrieden sind, können Sie nicht zu Schritt 1 und 2 zurückkehren und mehr experimentieren. das wäre ungültig.

  5. Schließlich können Sie für den produktiven Einsatz ein Modell mit dem gesamten Datensatz, Training + Validierung + Testsatz trainieren und für den produktiven Einsatz verwenden. Beachten Sie, dass Sie die Genauigkeit dieses Produktionsmodells niemals messen, da Sie dafür keine Daten mehr haben. Sie haben bereits alle Daten verwendet. Wenn Sie eine Schätzung der Leistung wünschen, können Sie die geschätzte Genauigkeit aus Schritt 4 als Prognose für die Leistung in der Produktion verwenden, da dies die beste verfügbare Prognose für die zukünftige Leistung ist. Wie immer gibt es keine Garantien - das ist angesichts der uns vorliegenden Informationen nur die bestmögliche Schätzung. Es ist sicher möglich, dass es schlechter als Sie vorhergesagt oder besser als Sie vorhergesagt haben könnte - das ist immer wahr.


+ 1 für die Mühe, obwohl ich nicht ganz zustimme :) zB wenn Sie erwähnen "In Bezug auf die erwartete Leistung ist die Verwendung aller Daten nicht schlechter als die Verwendung einiger Daten und möglicherweise besser." Die Gründe dafür sehe ich nicht. Andererseits scheint der zweite Punkt, den Sie erwähnen, sehr wichtig zu sein, die Kreuzvalidierung! Sie trainieren / validieren also im Wesentlichen mit allen Stichproben und weisen daher wahrscheinlich Ausreißer im gewählten Endmodell zurück. Danke für deine Antwort.
pcko1

@ pcko1, Das Prinzip ist einfach. Wenn Sie Daten haben, sollten Sie diese vollständig oder teilweise verwenden? Warum? Wenn wir Daten erhalten, sollten wir, bevor wir etwas unternehmen, nur 10% davon wegwerfen und niemals darauf schauen. Tatsächlich ist es sogar besser, mehr zu löschen, wenn es gut ist, einige zu löschen. Vielleicht sollten wir also alle unsere Daten löschen. Das ist doch absurd, oder? Warum? Sehen Sie nach, ob Sie herausfinden können, warum und versuchen Sie es dann auf diese Situation anzuwenden. Hoffentlich bringt dich das zum Nachdenken!
DW

3

Einer der Gründe für einen Datensatz ist die Vermeidung einer Überanpassung. Wenn Sie eine Kreuzvalidierung verwenden, können Sie im Wesentlichen zulassen, dass der gesamte Datensatz als Trainingssatz fungiert. Bei einer Umschulung können Sie jedoch nicht überprüfen, ob Anzeichen für eine Überanpassung vorliegen. Ich denke, dass in beiden Fällen (Kreuzvalidierung oder Umschulung mit dem gesamten Datensatz) Ihr Ergebnis nicht dramatisch verändert werden sollte (aufgrund meiner ungebildeten Vermutung), aber Sie werden nicht in der Lage sein, Hyperparameter-Tuning durchzuführen oder Ihre Modellleistung zu validieren, wie Sie dies nicht tun Habe einen Testsatz. Ob es am Ende besser wird, ist schwer zu sagen, aber ich denke, die einzige Möglichkeit, dies zu wissen, besteht darin, im Laufe der Zeit ein A / B der beiden Modelle über reale Daten durchzuführen.

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.