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?
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:
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!
quelle
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:
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.
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 '
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.
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.
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.
quelle
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.
quelle