Ist die Optimierung von Hyperparametern für eine Stichprobe eines Datensatzes eine schlechte Idee?

19

Ich habe einen Datensatz mit 140000 Beispielen und 30 Funktionen, für die ich mehrere Klassifikatoren für eine binäre Klassifizierung trainiere (SVM, Logistic Regression, Random Forest usw.).

In vielen Fällen ist die Optimierung von Hyperparametern für den gesamten Datensatz mithilfe der Raster- oder Zufallssuche zeitlich zu kostspielig.

Ich begann mit der folgenden Technik

  • Unterprobe meines Datensatzes
  • Verwenden Sie die erhaltene Fraktion, um die Hyperparameter einzustellen
  • Verwenden Sie die erhaltenen Parameter, um ein Modell mit dem gesamten Datensatz zu trainieren

Um jeden Parametersatz im zweiten Schritt zu bewerten, benutze ich sklearn's GridSearchCVmit cv = 10. Um das endgültige Modell zu bewerten, das ich im dritten Schritt erstelle, verwende ich sklearn's cross_val_predict. In diesem Sinne bewerte ich meine Modelle, indem ich 10% der Daten auslasse, trainiere den Rest und messe die Vorhersagegenauigkeit auf den 10%, iterativ 10-mal, und nehme dann den Durchschnitt der Bewertungen.

Was mich beunruhigt hat, ist, dass die Vorhersagegenauigkeit, die ich durch das Training meines gesamten Datensatzes erhalte, sehr nahe an der Bewertung liegt, die ich erhalte, wenn ich die Parameter auf den besten Parametersatz abstimme (jeder getestete Parametersatz gibt eine Punktzahl aus, die sich aus der Mittelung von 10 ergibt). Ergebnisse der Fold-Cross-Validierung).

In den meisten Fällen liegt die Genauigkeit, cross_val_predictdie anhand aller Trainingsbeispiele (gesamter Datensatz) gemessen wurde, etwas über der Bewertung der besten Parameter.

Zur Veranschaulichung wird hier eine Reihe von Parametern ausgewertet (bei einem kleineren Datensatz als dem, den ich oben beschrieben habe, aber der Effekt ist derselbe).

Best parameters set found on development set:
{'kernel': 'rbf', 'C': 9, 'gamma': 0.1}
Scores for all sets of parameters
0.851 (+/-0.006) for {'kernel': 'rbf', 'C': 3, 'gamma': 0.5}
0.852 (+/-0.006) for {'kernel': 'rbf', 'C': 3, 'gamma': 0.1}
0.829 (+/-0.006) for {'kernel': 'rbf', 'C': 3, 'gamma': 0.001}
0.853 (+/-0.006) for {'kernel': 'rbf', 'C': 9, 'gamma': 0.1}
...

Und hier sind die gemittelten Punktzahlen (von cross_val_predict), die ich aus dem Training für meinen gesamten Datensatz mit den besten Parametern erhalten habe

precision    recall  f1-score   support

      0       0.86      0.85      0.86     15417
      1       0.86      0.87      0.87     16561

avg / total       0.86      0.86      0.86     31978

acc score: 0.863750078179
roc au score: 0.863370490059
[[13147  2270]
 [ 2087 14474]]

Wie Sie sehen können, verbessert das Training des gesamten Datensatzes die Ergebnisse. Ich habe auch bestätigt, dass ein schlecht abgestimmtes Modell (z. B. die Verwendung der Standardwerte oder Zufallswerte für Cund gamma) zu einer viel schlechteren Vorhersagegenauigkeit führt.

Insgesamt denke ich, dass das Optimieren der Hyperparameter für eine Teilmenge nicht ideal ist, aber möglicherweise zu relativ guten Ergebnissen führen kann, ohne zu lange warten zu müssen. Ich habe zum Beispiel vor der Verwendung dieses Ansatzes das optunityPaket zum Optimieren des Hyperparameters für den gesamten Datensatz verwendet. Dieser Vorgang würde 3-5 Tage in Anspruch nehmen und zu Ergebnissen führen, die entweder eine wirklich gute Präzision oder einen wirklich guten Rückruf aufweisen, jedoch nicht beides. Obwohl für jede Klasse entweder die Präzision oder der Rückruf wirklich hoch war (höher als bei allen meinen anderen klassifikatoren hatten erreicht) die f1 messung war wirklich niedrig. Im Gegenteil, die Verwendung des späteren Ansatzes führt zu einigen Stunden Training und einer besseren F1-Messung.

Meine Anliegen sind:

Beschränke ich meine Klassifizierungsgenauigkeit? Vermeide ich es, die gesamte Vorhersagekraft zu nutzen, die mein Dataset bieten kann, indem ich nur auf eine Teilmenge abstimme? Wenn ein solcher Leistungsschaden eintritt, wird er irgendwie durch einen Faktor begrenzt?

LetsPlayYahtzee
quelle
Bitte erläutern Sie die beiden Methoden, die zu einer genauen Vorhersage führen. Teilen Sie die Daten in Trainingssatz und Validierungssatz auf, wobei der Validierungssatz nur zum Optimieren von Hyperparametern und nicht zum Trainieren verwendet wird?
Iliyan Bobev
Siehe meine aktualisierte Frage. Ich hoffe es ist jetzt klarer.
LetsPlayYahtzee

Antworten:

15

Zusätzlich zu Jims (+1) Antwort: Bei einigen Klassifikatoren hängen die Hyperparameterwerte von der Anzahl der Trainingsbeispiele ab, z. B. bei einer linearen SVM ist das primäre Optimierungsproblem

min12w2+Ci=1ξi

unterliegen

yi(xiwb)1ξi,andξi0i

Beachten Sie, dass das Optimierungsproblem im Grunde genommen ein Maß für den Datenfehlanpassungsterm (die Summe über ) und einen Regularisierungsterm ist, der übliche Regrularisierungsparameter jedoch an den Datenfehlanpassungsterm angehängt wird. Offensichtlich ist die Summe umso größer, je mehr Trainingsmuster wir haben, und je kleiner sein sollte, um das gleiche Gleichgewicht mit der Größe der Gewichte aufrechtzuerhalten. CξiC

Einige Implementierungen der SVM-Neuparametrierung als

min12w2+Ci=1ξi

um zu kompensieren, aber manche nicht. Ein weiterer zu berücksichtigender Punkt ist, ob die optimalen Hyperparameter von der Anzahl der Trainingsbeispiele abhängen oder nicht.

Ich stimme Jim zu, dass eine Überanpassung des Modellauswahlkriteriums wahrscheinlich ein größeres Problem darstellt. Wenn Sie jedoch auch in der Teilstichprobe über genügend Daten verfügen, ist dies möglicherweise kein wesentliches Problem.

Dikran Beuteltier
quelle
11

Ist die Optimierung von Hyperparametern für eine Stichprobe eines Datensatzes eine schlechte Idee?

A: Ja, weil Sie das Risiko einer Überanpassung (der Hyperparameter) dieses spezifischen Testsets aufgrund der von Ihnen gewählten Aufteilung der Zugtests eingehen.

Beschränke ich meine Klassifizierungsgenauigkeit?

A: Ja, aber die gängige Weisheit des maschinellen Lernens ist: Passen Sie mit Ihren optimalen Hyperparametern, z. B. , Ihr Modell (e) auf den gesamten Datensatz an und machen Sie dieses Modell zu Ihrem endgültigen Modell für neue, unsichtbare, zukünftige Fälle.λ

Vermeide ich es, die gesamte Vorhersagekraft zu nutzen, die mein Dataset bieten kann, indem ich nur auf eine Teilmenge abstimme?

A: Siehe vorherige Antwort.

Wenn ein solcher Leistungsschaden eintritt, wird er irgendwie durch einen Faktor begrenzt?

A: idem.

Ich messe meine Genauigkeit mit dem 10-fachen Kreuz, mit dem ich auch die Parameter auswerte

A: Beachten Sie, dass dies anders ist als im Titel angegeben. 10-facher Lebenslauf iteriert über 10 Testzug-Teilungen, um eine "unvoreingenommene" (weniger voreingenommene) Schätzung der Generalisierbarkeit zu erhalten (in diesem Fall durch Genauigkeit gemessen). Der 10-fache Lebenslauf befasst sich genau mit dem Thema, über das ich in der ersten Antwort spreche.

Die Vorhersagegenauigkeit, die ich durch das Training meines gesamten Datensatzes erhalte

A: Dies ist eine "In-Sample" -Maßnahme, die optimistisch beeinflusst werden könnte . Vergessen Sie jedoch nicht, dass Sie viele Fälle und relativ wenige Funktionen haben, sodass diese optimistische Tendenz möglicherweise kein Problem darstellt. Nugget für maschinelles Lernen: "Der beste Regularizer sind mehr Daten."

[cont'd], ist immer sehr nah an der Bewertung, die ich bekomme, wenn ich die Parameter auf den besten Parametersatz abstimme.

A: Siehe vorherige Antwort. Schauen Sie sich die Hyperparameter-Diagramme an: Verringert die Optimierung den Fehler und um wie viel? Nach dem, was Sie sagen, macht das Stimmen nicht viel.

Sie können dies wie folgt testen. Machen Sie eine 70% -30% -Zugversuchsaufteilung. Vergleichen Sie die prädiktive Leistung von:

  1. ein nicht abgestimmtes Modell, das auf dem Zug trainiert wurde,
  2. ein 10-fach getuntes Modell, das auf dem Zug trainiert wurde.

Lassen Sie beide Modelle den Testsatz vorhersagen. Wenn die Leistung sehr ähnlich ist, macht die Optimierung nicht viel. Wenn sich die Leistung zugunsten des optimierten Modells unterscheidet, fahren Sie mit dem Optimierungsansatz fort.

Jim
quelle
1

Ich beantworte künstliche neuronale Netze (ANNs).

Die Hyperparameter von ANNs können entweder ihren Lernprozess (z. B. Lernrate oder Mini-Batch-Größe) oder ihre Architektur (z. B. Anzahl versteckter Einheiten oder Schichten) definieren.

Das Optimieren von Architektur-Hyperparametern für eine Teilmenge Ihres Trainingssatzes ist wahrscheinlich keine gute Idee (es sei denn, Ihrem Trainingssatz fehlt wirklich die Diversität, dh das Erhöhen der Größe des Trainingssatzes erhöht nicht die ANN-Leistung), da Architektur-Hyperparameter die Kapazität des ANN ändern.

Ich würde mich weniger darum kümmern, die Hyperparameter, die den Lernprozess definieren, auf einer Teilmenge Ihrer Trainingsmenge abzustimmen, aber ich denke, man sollte sie empirisch validieren.

Franck Dernoncourt
quelle
0

Sie können Algorithmen zur Optimierung von Hyperparametern verwenden, die Multifidelity-Auswertungen unterstützen, dh Auswertungen von Teilmengen Ihrer Daten, um eine grobe, aber nützliche Schätzung der optimalen Hyperparameterwerte für den gesamten Datensatz zu erhalten. Solche Ansätze ermöglichen es typischerweise, die Gesamtrechenkosten zu reduzieren, die zum Ausführen einer Hyperparameteroptimierung erforderlich sind.

IndieSolver
quelle