Quervalidierung und Parametertuning


17

Kann mir jemand sagen, was genau eine Kreuzvalidierungsanalyse als Ergebnis ergibt? Ist es nur die durchschnittliche Genauigkeit oder gibt es ein Modell mit eingestellten Parametern?

Ich habe nämlich irgendwo gehört, dass die Kreuzvalidierung für die Parametereinstellung verwendet wird.

Antworten:


26

Die Kreuzvalidierung gibt ein Maß für die Genauigkeit außerhalb der Stichprobe, indem über mehrere zufällige Partitionen der Daten in Trainings- und Teststichproben gemittelt wird. Es wird häufig zur Parameteroptimierung verwendet, indem für mehrere (oder viele) mögliche Werte eines Parameters eine Kreuzvalidierung durchgeführt und der Parameterwert ausgewählt wird, der den niedrigsten Durchschnittsfehler bei der Kreuzvalidierung ergibt.

Der Prozess selbst gibt Ihnen also keine Modell- oder Parameterschätzungen, aber Sie können ihn verwenden, um zwischen Alternativen zu wählen.


12

Hinzufügen zu Jonathans Antwort.

Wenn Sie jedoch eine Kreuzvalidierung für die Parameteroptimierung verwenden, werden die Out-Samples tatsächlich Teil Ihres Modells. Sie benötigen also eine weitere unabhängige Stichprobe, um die Leistung des endgültigen Modells korrekt zu messen.

Die Kreuzvalidierung wird zur Messung der Modellleistung eingesetzt und kann mehr als nur die durchschnittliche Genauigkeit messen:
Eine zweite Sache, die Sie mit der Kreuzvalidierung messen können, ist die Modellstabilität in Bezug auf sich ändernde Trainingsdaten: Die Kreuzvalidierung erstellt viele "Ersatz" -Modelle, mit denen trainiert wird leicht abweichende Trainingssätze. Wenn die Modelle stabil sind, sind alle diese Ersatzmodelle gleichwertig, wenn das Training instabil ist, variieren die Ersatzmodelle stark. Sie können dies "stark variieren" quantifizieren, z. B. als Varianz der Vorhersagen verschiedener Ersatzmodelle für dieselbe Stichprobe (bei iterierter / wiederholter Kreuzvalidierung) oder z. B. als Varianz der Parameter der Ersatzmodelle.


3

Als Ergänzung zu früheren Antworten beginnen wir von vorne:

Es gibt nur wenige Möglichkeiten, wie Sie Ihre Modelle an die Trainingsdaten anpassen können. Einige sind offensichtlich, andere weniger. Erstens und am wichtigsten ist die Überanpassung der Trainingsparameter (Gewichte) an die Daten (Kurvenanpassungsparameter in der logistischen Regression, Netzwerkgewichte im neuronalen Netzwerk usw.). Dann würden Sie das Rauschen in den Daten modellieren - wenn Sie überanpassen, erfassen Sie nicht nur die zugrunde liegende Erzeugungsfunktion, sondern auch die Zufälligkeit aufgrund der Stichprobengröße und der Tatsache, dass die Stichprobe keine perfekte Darstellung der Grundgesamtheit ist. Diese Überanpassung kann bis zu einem gewissen Grad durch Beeinträchtigung bestimmter Attribute (allgemeiner Komplexität) des Modells verringert werden. Dies kann erreicht werden, indem das Training gestoppt wird, sobald sich die Leistung der Zugprobe nicht mehr wesentlich verbessert, indem einige Neuronen aus einem neuronalen Netzwerk entfernt werden (Ausfall genannt).https://ieeexplore.ieee.org/document/614177/ ) usw.). Diese Regularisierungsstrategien sind jedoch selbst parametrisiert (wann hören Sie auf ?, wie viele Neuronen müssen entfernt werden? Usw.). Darüber hinaus verfügen die meisten Modelle für maschinelles Lernen über eine Reihe von Hyperparametern, die vor Beginn des Trainings festgelegt werden müssen. Und diese Hyperparameter werden in der Phase der Parametereinstellung abgestimmt.

Das bringt uns zu einer zweiten und subtileren Art der Überanpassung: der Hyperparameter-Überanpassung. Eine Kreuzvalidierung kann verwendet werden, um "beste" Hyperparameter zu finden, indem Ihr Modell wiederholt von Grund auf auf k-1-Falten der Probe trainiert und auf der letzten Falte getestet wird.

Wie geht das genau? Abhängig von der Suchstrategie (angegeben durch tenshi) legen Sie Hyperparameter des Modells fest und trainieren Ihr Modell k-mal, jedes Mal unter Verwendung einer anderen Testfalte. Sie "erinnern" sich an die durchschnittliche Leistung des Modells über alle Testfalten und wiederholen den gesamten Vorgang für einen weiteren Satz von Hyperparametern. Anschließend wählen Sie eine Reihe von Hyperparametern aus, die der besten Leistung bei der Kreuzvalidierung entsprechen. Wie Sie sehen, hängen die Berechnungskosten dieses Verfahrens stark von der Anzahl der zu berücksichtigenden Hyperparametersätze ab. Aus diesem Grund wurden einige Strategien für die Auswahl dieses Sets entwickelt (hier werde ich verallgemeinern, was Tenshi gesagt hat):

  1. Rastersuche: Für jeden Hyperparameter geben Sie eine endliche Anzahl möglicher Werte an. Dann ist die Prozedur für alle Kombinationen von aufgezählten Hyperparametern erschöpfend. Wenn Sie kontinuierliche Hyperparameter haben, können Sie natürlich nicht alle ausprobieren.
  2. Randomisierte Rastersuche: Ähnlich wie bei der normalen Rastersuche, aber Sie probieren diesmal nicht alle Kombinationen ausführlich aus, sondern probieren eine feste Anzahl von Malen für alle möglichen Werte. Beachten Sie, dass es hier nicht nur möglich ist, mögliche Werte für einen Hyperparameter aufzulisten, sondern Sie können auch eine Verteilung bereitstellen, aus der Sie eine Stichprobe erstellen können.
  3. BayesianSearch - Die Kombination von Hyperparameterwerten wird ausgewählt, um die erwartete Verbesserung des Scores zu maximieren. Weitere Informationen : http://papers.nips.cc/paper/4522-practical-bayesian-optimization-of-machine-learning-algorithms.pdf . Und eine Bibliothek, die sich nur damit beschäftigt: https://github.com/hyperopt/hyperopt . Da es nicht so einfach ist, mit sklearn zu kombinieren, wie es Tenshi empfohlen hat, verwenden Sie es nur, wenn Sie nicht mit sklearn arbeiten.
  4. Andere Möglichkeiten für die geführte Suche im Hyperparameterraum. Meiner Erfahrung nach werden sie nur selten verwendet, deshalb werde ich sie hier nicht behandeln.

Dies ist jedoch nicht das Ende der Geschichte, da die Hyperparameter auch die Daten überfüllen können (und werden). In den meisten Fällen können Sie einfach damit leben, aber wenn Sie die Generalisierungsleistung Ihres Modells maximieren möchten, möchten Sie möglicherweise auch versuchen, die Hyperparameter zu regulieren. Zunächst können Sie die Leistung von Daten außerhalb der Stichprobe mithilfe der Suche in verschachtelten Rastern etwas besser einschätzen (Details: http://scikit-learn.org/stable/auto_examples/model_selection/plot_nested_cross_validation_iris.html , Erläuterung: Verschachtelte Kreuzvalidierung zur Modellauswahl) oder verwenden Sie einfach einen Validierungssatz, der nicht für die Optimierung von Hyperparametern verwendet wird. Was die Regularisierung im Hyperparameterraum betrifft, ist dies eine mehr oder weniger offene Frage. Einige Ideen beinhalten, dass nicht die besten Hyperparameterwerte ausgewählt werden, sondern etwas, das näher an der Mitte liegt. Die Argumentation lautet wie folgt: Die besten Hyperparameterwerte passen wahrscheinlich zu den Daten, nur weil die Leistung besser ist als die der anderen Zugdaten. Schlechte Parameter sind einfach schlecht, aber diejenigen in der Mitte können möglicherweise eine bessere Verallgemeinerung erzielen als die besten . Andrew Ng hat einen Artikel darüber geschrieben. Eine andere Option ist die Begrenzung des Suchraums (Sie regulieren, indem Sie hier eine starke Verzerrung einfügen - Werte außerhalb des Suchraums werden niemals offensichtlich ausgewählt).

Nebenbemerkung: Die Verwendung der Genauigkeit als Leistungsmetrik ist in den meisten Fällen eine sehr schlechte Idee. Sehen Sie sich die f1- und f_beta-Scores an. Diese Metriken spiegeln in den meisten Fällen besser wider, was Sie bei Problemen mit der binären Klassifikation tatsächlich optimieren möchten.

Zusammenfassend lässt sich sagen, dass die Kreuzvalidierung selbst verwendet wird, um die Leistung des Modells anhand von Daten außerhalb der Stichprobe zu bewerten, aber auch zum Optimieren von Hyperparametern in Verbindung mit einer der Suchstrategien im Hyperparameterraum verwendet werden kann. Wenn Sie gute Hyperparameter finden, können Sie eine Überanpassung vermeiden oder zumindest reduzieren. Beachten Sie jedoch, dass Hyperparameter auch die Daten überanpassen können.


2

Diese Antwort ist möglicherweise hilfreich, wenn Sie aus dem Scikit-Lern-Umfeld stammen.

Die k-fache Kreuzvalidierung wird verwendet, um die Daten in kPartitionen aufzuteilen. Der Schätzer wird dann auf k-1Partitionen trainiert und dann auf der kthPartition getestet . Wenn Sie also auswählen, welche Partition die Partition sein soll kth, gibt es verschiedene kMöglichkeiten. Somit erhalten Sie kErgebnisse aller kMöglichkeiten Ihres Schätzers.

Dies sind rechenintensive Methoden, aber wenn Sie verschiedene Schätzer ausprobieren möchten, können Sie diese drei Methoden ausprobieren, um die Hyperparameter-Optimierung zusammen mit CV durchzuführen:

ich. GridSearchCV - eine vollständige Liste aller möglichen P und C für die Hyperparameter für alle Schätzer. Am Ende werden die besten Hyperparameter unter Verwendung des Mittelwerts des jeweiligen CV-Mittelwerts des Schätzers angegeben.

ii. RandomizedSearchCV - Führt nicht alle P- und C-Werte von Hyperparametern aus, sondern ergibt bei einem randomisierten Ansatz den bestmöglichen genauen Schätzer, der mehr Rechenaufwand spart.

iii. BayesSearchCV - Nicht Teil der scikit-learnBayes'schen Optimierung, um zufällige Such- und Anpassungsergebnisse zu erhalten.

tl: dr : CV wird nur verwendet, um eine hohe Abweichung und Varianz für Ihren Schätzer aufgrund der übergebenen Daten zu vermeiden. Hoffe es war hilfreich.

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.