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):
- 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.
- 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.
- 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.
- 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.