Kreuzvalidierung und Parameteroptimierung

11

Ich habe eine Frage zur Parameteroptimierung, wenn ich die 10-fache Kreuzvalidierung verwende.

Ich möchte fragen, ob die Parameter während des Modelltrainings jeder Falte festgelegt werden sollen oder nicht, dh (1) einen Satz optimierter Parameter für die durchschnittliche Genauigkeit jeder Falte auswählen.

oder

(2) Ich sollte den optimierten Parameter für jede Falte finden und dann verwendet jede Falte unterschiedliche optimierte Parameter, um ihr Modell zu trainieren, dann die Testdaten der Falte zu testen und schließlich die Genauigkeit jeder Falte als Ergebnis zu mitteln.

Welches ist die richtige Methode zur Kreuzvalidierung? Danke vielmals.

Kevin
quelle
Diese Frage: stats.stackexchange.com/questions/1826/… hat zwei großartige Antworten (höchste Punktzahl). Ich denke, sie könnten Ihnen bei Ihrer Frage helfen. Der zweite ist genau das, was Sie wollen. OBS.: Ich würde das gerne als Kommentar schreiben, aber ich kann es nicht tun, also habe ich es beantwortet.
Augusto

Antworten:

10

Unterscheiden wir zunächst zwischen zwei Parametersätzen: Modellparametern (z. B. Gewichten für Merkmale in der Regression) und Parametern für den Lernalgorithmus (und Hyperparametern). Der Zweck der Kreuzvalidierung besteht darin, Lernparameter zu identifizieren, die sich gut auf die Bevölkerungsstichproben verallgemeinern lassen, aus denen wir in jeder Falte lernen.

Genauer gesagt: Wir suchen global über den Raum nach Lernparametern, aber innerhalb jeder Falte legen wir Lernparameter fest und lernen Modellparameter. Das Ergebnis sollten Lernparameter sein, die im Durchschnitt die beste Leistung in allen Falten erzielen. Wir können diese dann verwenden, um ein Modell für den gesamten Datensatz zu trainieren.

Joel
quelle
Entschuldigung, die Art von Parameter, die ich in Frage gestellt habe, sind Hyperparameter, wie Sie sagten.
Kevin
Wie die Parameter c und g in libSVM. Also sollte ich das gleiche c und g verwenden, um das Modell jeder Falte wie die oben erwähnte (2) -Methode zu trainieren, und dann das beste auswählen? Vielen Dank.
Kevin
2
Die obigen Punkte (1) und (2) waren mir nicht klar, so dass ich mich nicht explizit darauf bezog. Sie sollten den Bereich von c & g durchsuchen, der Ihre Aufgabenmetrik maximiert, wenn er über die Falten gemittelt wird. Sie setzen also c & g auf einen bestimmten Wert, führen das Trainings- und Testverfahren für alle Falten durch, mitteln sie, behalten diese Punktzahl bei, ändern c oder g und wiederholen. Letztendlich finden Sie das beste C & G und können das endgültige Modell für alle Ihre Daten trainieren.
Joel
Vielen Dank. Ich versuche die Antworten zusammenzufassen. Die Daten wurden auf das 10-fache aufgeteilt: Fold-1: (Zug1, Test1) ... Fold-10: (Zug10, Test10) Verwenden Sie dann ein (c1, g1), um Fold-1 bis Fold-10 zu trainieren und zu testen. Durchschnitt aller Falzgenauigkeit. Versuchen Sie es mit einem anderen (c2, g2), um den gleichen Vorgang auszuführen. Wiederholen Sie diesen Vorgang, bis ich das Beste gefunden habe (c, g). Die durchschnittliche Genauigkeit des besten (c, g) ergibt sich aus meiner 10-fachen Kreuzvalidierung.
Kevin
1
Klingt richtig ...
Joel
15

Ich denke, die derzeit akzeptierte Antwort ist auf unglückliche Weise unvollständig. Ich stimme dem Satz nicht zu

Der Zweck der Kreuzvalidierung besteht darin, Lernparameter zu identifizieren, die sich gut auf die Bevölkerungsstichproben verallgemeinern lassen, aus denen wir in jeder Falte lernen.

Dies ist in der Tat eine sehr wichtige Anwendung der Kreuzvalidierung, aber nicht die einzige. Normalerweise möchten Sie zwei Dinge tun:

  1. Bauen Sie das beste Modell, das Sie können
  2. Verschaffen Sie sich einen genauen Eindruck von der Leistung

Um Ziel 1 in Abhängigkeit von Ihrem Algorithmus zu erreichen, müssen Sie möglicherweise einige Hyperparameter anpassen. Dies erfolgt in der Tat häufig durch Kreuzvalidierung. Dies hilft Ihnen jedoch noch nicht bei Ziel 2. Dazu müssen Sie die Kreuzvalidierung grundsätzlich wie folgt verschachteln:

  • Trennen Sie die gesamten Daten in n Falten
  • Für jede Falte trennen Sie die Trainingsdaten erneut in Unterfalten
  • Verwenden Sie die Kreuzvalidierung für die Unterfalten, um gute Hyperparameter zu lernen
  • Mit diesen Hyperparametern bauen Sie ein Modell auf den Trainingsdaten dieser Falte auf
  • Testen Sie das Modell anhand der Testdaten
  • Wiederholen Sie dies bei der nächsten Falte

Um ein gutes Modell zu erstellen, benötigen Sie nur die innere Kreuzvalidierung. Sie müssen dies noch tun, um ein gutes Modell zu erhalten. Um jedoch eine gute Schätzung Ihrer Modellleistung zu erhalten, müssen Sie den gesamten Prozess der Modellbildung in einem Kreuzvalidierungsschema durchführen. Dies schließt auch Schritte wie Imputation usw. ein.

Erik
quelle
1
Erik, kannst du bitte eine Referenz geben, wie dieser Prozess durchgeführt wird?
Chao
Hallo @Erik, die allgemeine Reihenfolge der Analysen wäre also: (1) Finden Sie optimale Abstimmungsparameter mit Kreuzvalidierung, (2) Trainieren Sie das Modell (mit den gewonnenen Abstimmungsparametern) im gesamten Trainingsdatensatz neu, um die Modellparameter zu erhalten, und (3) ) Sehen Sie sich die Gesamtleistungsschätzung dieser Methode mithilfe der verschachtelten Kreuzvalidierung an. Was mich verwirrt, ist, dass im Verlauf des Nester-CV unterschiedliche Hyperparameter ausgewählt werden können, sodass der verschachtelte CV die Gesamtleistung der oben gewonnenen Hyperparameter- / Modellparameter nicht speziell untersuchen würde.
Michelle
Ich bin etwas spät dran, aber ich möchte darauf hinweisen, dass diese Methode auch als "verschachtelt" oder "doppelte Kreuzvalidierung" bezeichnet wird. Hier ist eine nette Erklärung von Tom Fearn und ein Beispiel mit Code im Scikit. Dokumentation lernen
MD004