In CrossValidated gibt es zahlreiche Threads zum Thema Modellauswahl und Kreuzvalidierung. Hier sind ein paar:
- Interne und externe Kreuzvalidierung und Modellauswahl
- @ DikranMarsupials beste Antwort auf Feature-Auswahl und Kreuzvalidierung
Die Antworten auf diese Themen sind jedoch eher allgemein gehalten und heben hauptsächlich die Probleme hervor, die bei bestimmten Ansätzen zur Kreuzvalidierung und Modellauswahl auftreten.
Um die Dinge so konkret wie möglich zu machen , sagen wir zum Beispiel, dass wir mit einer SVM mit einem RBF-Kernel arbeiten: und das Ich habe einen Datensatz mit Features X und Beschriftungen y , und das möchte ich
- Finde die bestmöglichen Werte meines Modells ( und )
- Trainieren Sie die SVM mit meinem Datensatz (für die endgültige Bereitstellung)
- Schätzen Sie den Generalisierungsfehler und die Unsicherheit (Varianz) um diesen Fehler herum
Dazu würde ich persönlich eine Rastersuche durchführen, zB versuche ich jede mögliche Kombination von und . Der Einfachheit halber können wir die folgenden Bereiche annehmen:
Genauer gesagt, mit meinem vollständigen Datensatz mache ich Folgendes:
- Für jedes ( , ) Paar führe ich wiederholte Iterationen (z. B. 100 zufällige Wiederholungen) der fachen Kreuzvalidierung (z. B. ) in meinem Datensatz durch, dh ich trainiere meine SVM auf Falten und werte die aus Fehler in der linken Falte, der alle Faltungen durchläuft . Insgesamt sammle ich 100 x 10 = 1000 Testfehler.
- Für jedes solche ( , ) Paar berechne ich den Mittelwert und die Varianz dieser 1000 .
Jetzt möchte ich das beste Modell (die besten Kernelparameter) auswählen, mit dem ich meine endgültige SVM für den vollständigen Datensatz trainieren würde. Mein Verständnis ist , dass das Modell der Wahl, die das hatte geringsten Fehler Mittelwert und die Varianz und wäre die richtige Wahl sein, und dass dieses Modell der sind sind meine besten Schätzungen der Generalisierungsfehler Bias des Modells und die Varianz beim Training mit den vollständigen Datensatz.σ M μ M σ M
ABER nachdem ich die Antworten in den obigen Threads gelesen habe, habe ich den Eindruck, dass diese Methode zur Auswahl der besten SVM für die Bereitstellung und / oder zur Abschätzung ihres Fehlers (Generalisierungsleistung) fehlerhaft ist und dass es bessere Möglichkeiten zur Auswahl der gibt beste SVM und meldet seinen Fehler. Wenn ja, was sind sie? Ich suche bitte eine konkrete Antwort.
Wie genau kann ich bei diesem Problem das beste Modell auswählen und den Generalisierungsfehler richtig einschätzen ?
quelle
Antworten:
Mein Artikel in JMLR geht genau auf diese Frage ein und zeigt, warum das in der Frage vorgeschlagene Verfahren (oder zumindest eines sehr ähnlichen) zu optimistisch voreingenommenen Leistungsschätzungen führt:
Gavin C. Cawley, Nicola LC Talbot, "Überanpassung bei der Modellauswahl und anschließende Auswahlverzerrung bei der Leistungsbewertung", Journal of Machine Learning Research, 11 (Jul): 2079–2107, 2010. ( www )
Der Schlüssel zum Erinnern ist, dass die Kreuzvalidierung eine Technik zum Schätzen der Generalisierungsleistung für eine Methode zum Generieren eines Modells ist und nicht für das Modell selbst. Wenn die Auswahl von Kernelparametern Teil des Prozesses zur Generierung des Modells ist, müssen Sie auch den Modellauswahlprozess über Kreuz validieren. Andernfalls erhalten Sie eine optimistisch voreingenommene Leistungsschätzung (wie bei dem von Ihnen vorgeschlagenen Verfahren).
Angenommen, Sie haben eine Funktion fit_model, die einen Datensatz mit den Attributen X und den gewünschten Antworten Y aufnimmt und das angepasste Modell für diesen Datensatz einschließlich der Optimierung von Hyperparametern (in diesem Fall Kernel und Regularisierungsparameter) zurückgibt. Diese Abstimmung von Hyperparametern kann auf viele Arten durchgeführt werden, zum Beispiel um den Kreuzvalidierungsfehler über X und T zu minimieren.
Schritt 1 - Passen Sie das Modell mit der Funktion fit_model an alle verfügbaren Daten an. Dies gibt Ihnen das Modell, das Sie im Betrieb verwenden werden.
Schritt 2 - Leistungsbewertung. Führen Sie eine wiederholte Gegenprüfung mit allen verfügbaren Daten durch. In jeder Falte werden die Daten in einen Trainingssatz und einen Testsatz aufgeteilt. Passen Sie das Modell mit dem Trainingsset an (zeichnen Sie Hyperparameterwerte für das angepasste Modell auf) und bewerten Sie die Leistung mit dem Testset. Verwenden Sie den Mittelwert über alle Testsätze als Leistungsschätzung (und betrachten Sie möglicherweise auch die Werteverteilung).
Schritt 3 - Variabilität der Hyperparametereinstellungen - Führen Sie eine Analyse der in Schritt 3 erfassten Hyperparameterwerte durch. Ich möchte jedoch darauf hinweisen, dass Hyperparameter nichts Besonderes sind, sondern lediglich Parameter des Modells, die geschätzt wurden (indirekt) ) aus den Daten. Sie werden aus rechnerischen / mathematischen Gründen eher als Hyperparameter als als Parameter behandelt, dies muss jedoch nicht der Fall sein.
Das Problem bei der Verwendung der Kreuzvalidierung besteht darin, dass die Trainings- und Testdaten keine unabhängigen Stichproben sind (da sie Daten gemeinsam nutzen), was bedeutet, dass die Schätzung der Varianz der Leistungsschätzung und der Hyperparameter wahrscheinlich verzerrt ist (d. H kleiner als es für wirklich unabhängige Datenproben in jeder Falte wäre). Anstelle einer wiederholten Kreuzvalidierung würde ich wahrscheinlich stattdessen Bootstrapping verwenden und die resultierenden Modelle einsacken, wenn dies rechnerisch machbar wäre.
Um eine unvoreingenommene Leistungsschätzung zu erhalten, muss jedes Verfahren, das Sie zum Generieren des endgültigen Modells (fit_model) verwenden, in jeder Falte des Kreuzvalidierungsverfahrens vollständig und unabhängig wiederholt werden.
quelle
rather than repeated cross-validation you would go for bootstrapping
- Was ist genau der Unterschied? In beiden Fällen werden die Daten mehrmals aufgeteilttrain
undtest
anschließend trainierttrain
und ausgewertettest
, nicht wahr?Eine Prozedur, die diese Hyperparameter optimiert und eine SVM mit diesen trainiert, ist auch nur ein Algorithmus für maschinelles Lernen . Anstatt nur die internen Parameter des SVM (die Unterstützungsvektoren) zu optimieren, werden auch die Hyperparameter optimiert.
Jetzt haben Sie zwei Probleme [die unabhängig voneinander gelöst werden können]:
Wie führe ich eine Hyperparameter-Optimierung / Modellauswahl durch?
Wie schätze ich den Generalisierungsfehler eines Algorithmus für maschinelles Lernen?
Lesen Sie Cross-Validation-Missbrauch (Berichterstellung der Leistung für den besten Hyperparameterwert) , um sicherzustellen, dass Sie diese nicht verwechseln.
Eine spezifische (wahrscheinlich nicht optimale) Lösung für das konkrete Problem Ihrer Frage:
Hier
model
wäre Ihr "bestes Modell" undloss_CV
eine "richtige Schätzung seines Generalisierungsfehlers" (obwohl nach oben voreingenommen, aber Sie können den Kuchen nicht haben und ihn auch essen).quelle