Die Kreuzvalidierung ist eine weit verbreitete Technik, um die Verallgemeinerung eines maschinellen Lernmodells zu bewerten. Nicht hierSTATISTIKENWir diskutieren oft Messmetriken und wie wir sie effizient in unseren Data-Science-Workflow integrieren können. In diesem Blog-Beitrag stelle ich Ihnen die Grundlagen der Kreuzvalidierung vor, gebe Ihnen Tipps zur Optimierung ihrer Parameter und zeige Ihnen einen effizienten Weg, sie von Grund auf neu zu erstellen.
Grundlagen der Modellbewertung und Kreuzvalidierung
Die Kreuzvalidierung ist eine Technik zur Bewertung von Modellen für maschinelles Lernen. Die zentrale Erkenntnis hinter dieser Modellbewertung ist herauszufinden, ob das trainierte Modell verallgemeinerbar ist, d. das heißt, ob die Vorhersagekraft, die wir im Training beobachten, auch in unsichtbaren Daten zu erwarten ist. Wir könnten das Modell direkt mit den Daten füttern, für die es entworfen wurde, dh H., die es vorhersagen sollte. Aber selbst dann gibt es für uns keine Möglichkeit zu wissen oderüberprüfenwenn die Vorhersagen stimmen.
Natürlich möchten wir eine Art Benchmark für die Verallgemeinerung unseres Modells haben, bevor wir es in Produktion nehmen. Die Idee ist also, die vorhandenen Trainingsdaten in einen eigentlichen Trainingsdatensatz und einen Validierungstestdatensatz aufzuteilen, der nicht für das Training verwendet wird und als “unsichtbare” Daten dient. Da dieser Testdatensatz Teil der ursprünglichen Trainingsdaten ist, haben wir einen vollständigen Satz „korrekter“ Ergebnisse zu verifizieren. Eine geeignete Fehlermetrik, wie z. B. der mittlere quadratische Fehler (RMSE) oder der mittlere absolute prozentuale Fehler (MAPE), kann verwendet werden, um die Modellleistung zu bewerten. Bei der Auswahl der geeigneten Bewertungsmetrik ist jedoch Vorsicht geboten, da es Fallstricke gibt (wie inseinbeschrieben im Blogbeitrag meines Kollegen Jan).
Für viele maschinelle Lernalgorithmen können Hyperparameter angegeben werden, z. B. die Anzahl der Bäume in einem zufälligen Wald. Die Kreuzvalidierung kann auch verwendet werden, um die Hyperparameter eines Modells anzupassen, indem der Generalisierungsfehler verschiedener Modellspezifikationen verglichen wird.
Allgemeine Ansätze zur Modellbewertung
Es gibt Dutzende von Modellbewertungstechniken, jede mit einem Kompromiss zwischen Varianz, Bias und Rechenzeit. Bei der Bewertung eines Modells ist es wichtig, diese Kompromisse im Auge zu behalten, da die Wahl der geeigneten Technik stark vom vorliegenden Problem und den beobachteten Daten abhängt. Ich werde dieses Thema behandeln, nachdem ich zwei der gebräuchlichsten Modellevaluierungstechniken vorgestellt habe: Split-Test-Training und k-fache Kreuzvalidierung.
Die erste Methode teilt die Trainingsdaten nach dem Zufallsprinzip in eine Trainingseinheit und eine Testeinheit auf (Abbildung 1), wobei normalerweise ein großer Teil der Daten als Trainingsdatensatz beibehalten wird. Die Verhältnisse von 70/30 oder 80/20 werden in der Literatur am häufigsten verwendet, und das genaue Verhältnis hängt von der Größe der Daten ab.
Der Nachteil dieses Ansatzes besteht darin, dass diese einzelne zufällige Aufteilung dazu führen kann, dass die Daten in zwei sehr unausgewogene Teile aufgeteilt werden, was zu verzerrten Schätzungen des Generalisierungsfehlers führt. Dies ist besonders kritisch, wenn Sie über begrenzte Daten verfügen, da einige Merkmale oder Muster vollständig im Testteil landen können. In diesem Fall hat das Modell keine Chance, sie zu lernen, und seine Leistung wird möglicherweise unterschätzt.
Eine robustere Alternative ist die sogenannte k-fache Kreuzvalidierung (Abbildung 2). Hier werden die Würfel gemischt und dann zufälligin Teilmengen aufgeteilt. Der Hauptvorteil gegenüber der Aufteilung von Testzügen besteht darinalleÖ
Partitionen wird iterativ als Testdatensatz (d. h. Validierungssatz) mit dem Rest verwendet
-Die Teile in dieser Iteration dienen als Trainingsdaten. Dieser Prozess
Wiederholungszeiten für jede Beobachtung, die in die Trainings- und Testdaten aufgenommen werden sollen. Die entsprechende Fehlermetrik wird einfach als Durchschnitt aller berechnet
Die Iterationen werden berechnet und liefern den Kreuzvalidierungsfehler.
es ist eher wie einVerlängerungdes Bereichs Zugtest als völlig neue Methode: nämlich das Zugtestverfahrenwiederholte Male. Ja
Zum Beispiel so niedrig wie
ausgewählt ist, haben Sie nur zwei Spiele. Aber auch diese Vorgehensweise ist dem Test Train Splitting immer noch überlegen, dabeideTeile können iterativ für das Training ausgewählt werden, was dem Modell die Möglichkeit dazu gibtAllenLerndaten und nicht nur eine zufällige Teilmenge davon. Daher führt dieser Ansatz im Allgemeinen zu stärkeren Leistungsschätzungen.
Ein Vergleich der beiden obigen Abbildungen zeigt, dass eine 80/20-Aufteilung zwischen Training und Prüfung bestehteine Iteration5 mal (bzw) entspricht einer Kreuzvalidierung, bei der 4/5 der Daten für das Training und 1/5 für die Validierung aufbewahrt werden. Der Hauptunterschied besteht darin, dass bei der k-fachen Kreuzvalidierung die Validierung in jedem der
Iterationen scrollen. Beachten Sie, dass die k-fache Kreuzvalidierung robuster ist als nur die Aufteilung der Trainingsversuche
Falten: Bei der k-fachen Kreuzvalidierung wird die Aufteilungeinmalgetan und dann durch die Partitionen iteriert, während das Training und Testen die Daten iterativ aufteilte
-Zeiten werden neu verteilt, was dazu führen kann, dass einige Daten während des Trainings ausgelassen werden.
Wiederholter CV und LOOCV
Es gibt viele Varianten der k-fachen Kreuzvalidierung. Sie können beispielsweise auch eine „wiederholte Kreuzvalidierung“ durchführen. Die Idee dahinter ist, sobald die Daten da sindDie Partitionen wurden geteilt, diese Teilung wird auf das gesamte Verfahren angewendet. Auf diese Weise besteht kein Risiko, dass wir einige zufällige Teile löschen. Wiederholen Sie bei wiederholtem CV diesen Vorgang des Mischens und Randomisierens der Daten
Subsets eine bestimmte Anzahl von Malen. Sie können dann die resultierenden Kreuzvalidierungsfehler aus jedem Schritt mitteln, um eine Schätzung der Gesamtleistung zu erhalten.
Ein weiterer Sonderfall der k-fachen Kreuzvalidierung ist die “Leave One Out Cross-Validation” (LOOCV), bei dersetzen. Dies bedeutet, dass in jeder Iteration eine verwendet wird.gerechtBetrachten Sie Ihre Daten als Teil der Validierung und des Rests
Beobachtungen als Trainingsset. Obwohl es wie eine sehr robuste Version der Kreuzvalidierung aussieht, wird von dieser Methode im Allgemeinen aus zwei Gründen abgeraten:
- Erstens sie normalerweisesehr rechenintensiv. Für die meisten Datensätze, die beim angewandten maschinellen Lernen verwendet werden, ist es weder wünschenswert noch machbar, das Modell zu verwenden.
Zeiten zu trainieren (obwohl es für sehr kleine Datensätze nützlich sein kann).
- Zweitens, selbst wenn man die Rechenleistung (und Zeit) hätte, um diesen Prozess durchzuführen, ist ein weiteres Argument der Kritiker von LOOCV aus statistischer Sicht, dass der resultierende Kreuzvalidierungsfehler eine große Varianz aufweisen kann. Denn das „Validierungsset“ besteht aus einer einzigen Beobachtung, und je nach Verteilung Ihrer Daten (und möglicher Ausreißer) kann diese stark variieren.
Im Allgemeinen ist anzumerken, dass die LOOCV-Leistung sowohl in der akademischen Literatur als auch in der breiteren Gemeinschaft des maschinellen Lernens ein etwas kontroverses Thema ist. Daher empfehle ich, diese Diskussion zu lesen, wenn Sie die Verwendung von LOOCV in Betracht ziehen, um die Verallgemeinerung eines Modells abzuschätzen (siehe z. B.Hier) und ähnliche Beiträge auf StackExchange). Wie so oft könnte die Antwort lauten: „Es kommt darauf an.“ Bedenken Sie auf jeden Fall den Rechenaufwand von LOOCV, der kaum ausgeschlossen werden kann (es sei denn, Sie haben einen kleinen Datensatz).
Der Wert von
und der Kompromiss zwischen Verzerrung und Varianz
Seist (unbedingt) nicht die beste Wahl, wie finden Sie also einen geeigneten Wert für
? Es stellt sich heraus, dass die Antwort auf diese Frage berüchtigt istBias-Varianz-KompensationEs ist aus. Denn ist was?
Der Wert fürbestimmt, in wie viele Partitionen die Daten aufgeteilt werden, und damit die Größe (d. h. die Anzahl der Beobachtungen, die in jedem Teil enthalten sind). Wir wollen
Wählen Sie einen aus, damit ein ausreichend großer Teil unserer Daten im Trainingssatz verbleibt. Schließlich wollen wir nicht zu viele Beobachtungen liefern, die zum Trainieren unseres Modells verwendet werden können. Je größer der Wert von
Das heißt, bei jeder Iteration werden dem Trainingssatz mehr Beobachtungen hinzugefügt.
Angenommen, wir haben 1200 Beobachtungen in unserem Datensatz, dann wäre unser Trainingssatz drinaußen
Es gibt Beobachtungen, aber mit
würde 1050 Beobachtungen beinhalten. Je mehr Beobachtungen für das Training verwendet werden, desto näher ist die tatsächliche Leistung des Modells (als ob es auf dem gesamten Datensatz trainiert worden wäre) und desto weniger Verzerrung (oder Bias) wird die Fehlerschätzung im Vergleich zu einem kleineren Teil aufweisen das Modell die Modelldaten. Aber mit der Steigerung
die Größe der haltenden Partition nimmt ab und die Fehlerschätzung wird bei jeder Iteration empfindlicher für diese wenigen Datenpunkte, was die Gesamtvarianz erhöhen kann. Im Grunde geht es um die Wahl zwischen den „Extremen“ der Zugtestsparte einerseits und LOOCV andererseits. Die folgende Abbildung veranschaulicht schematisch (!) die Bias-Varianz-Performance und den Rechenaufwand der verschiedenen Kreuzvalidierungsmethoden.
Als allgemeine Regel gilt, dass die Verzerrung mit höheren Werten von k abnimmt und die Varianz zunimmt. Herkömmlicherweise werden Werte wieÖ
als guter Kompromiss und sind daher in den meisten Fällen von maschinellem Lernen fast zum Standard geworden.
„Diese Werte haben empirisch gezeigt, dass sie Schätzungen der Testfehlerrate liefern, die nicht unter übermäßig hoher Verzerrung oder sehr hoher Varianz leiden.“
James und AI. 2013: 184
Wenn Sie sich nicht besonders für den Cross-Validation-Prozess interessieren, sondern ihn einfach in Ihren Data-Science-Workflow integrieren möchten (ich empfehle ihn sehr!), sollten Sie einen dieser Werte für verwendenauswählen und es dabei belassen.
Implementierung der Kreuzvalidierung in
Apropos Integration der Kreuzvalidierung in Ihren täglichen Arbeitsablauf, welche Möglichkeiten haben Sie? Glücklicherweise ist die Kreuzvalidierung ein Standardwerkzeug in beliebten Paketen für maschinelles Lernen wie B.Zirkumflex-Akzent
in R. Hier können Sie die Methode mit der Funktion verwendentrenControl
to set Im folgenden Skript trainieren wir einen 10-fach kreuzvalidierten Random Forest auf demIris
Aufzeichnen.
biblioteca(caret)set.seed(12345)inTrain