Wann immer ich mit xgboost arbeite, mache ich oft meine eigene Homebrew-Parametersuche, aber Sie können dies auch mit dem Caret-Paket wie KrisP tun, das gerade erwähnt wurde.
- Caret
In dieser Antwort auf Cross Validated finden Sie eine ausführliche Erläuterung zur Verwendung des Caret-Pakets für die Hyperparametersuche in xgboost.
Wie werden Hyperparameter von xgboost-Bäumen optimiert?
- Benutzerdefinierte Rastersuche
Ich beginne oft mit ein paar Annahmen, die auf den Dias von Owen Zhang über Tipps für die Datenwissenschaft basieren. S. 14
Hier können Sie sehen, dass Sie hauptsächlich die Zeilen- und Spaltenabtastung und möglicherweise die maximale Baumtiefe optimieren müssen. So führen Sie eine benutzerdefinierte Reihen- und Spaltenabtastung durch, um nach einem Problem zu suchen, an dem ich gerade arbeite:
searchGridSubCol <- expand.grid(subsample = c(0.5, 0.75, 1),
colsample_bytree = c(0.6, 0.8, 1))
ntrees <- 100
#Build a xgb.DMatrix object
DMMatrixTrain <- xgb.DMatrix(data = yourMatrix, label = yourTarget)
rmseErrorsHyperparameters <- apply(searchGridSubCol, 1, function(parameterList){
#Extract Parameters to test
currentSubsampleRate <- parameterList[["subsample"]]
currentColsampleRate <- parameterList[["colsample_bytree"]]
xgboostModelCV <- xgb.cv(data = DMMatrixTrain, nrounds = ntrees, nfold = 5, showsd = TRUE,
metrics = "rmse", verbose = TRUE, "eval_metric" = "rmse",
"objective" = "reg:linear", "max.depth" = 15, "eta" = 2/ntrees,
"subsample" = currentSubsampleRate, "colsample_bytree" = currentColsampleRate)
xvalidationScores <- as.data.frame(xgboostModelCV)
#Save rmse of the last iteration
rmse <- tail(xvalidationScores$test.rmse.mean, 1)
return(c(rmse, currentSubsampleRate, currentColsampleRate))
})
In Kombination mit etwas ggplot2-Magie und den Ergebnissen dieser Apply-Funktion können Sie eine grafische Darstellung der Suche zeichnen.
In diesem Diagramm repräsentieren hellere Farben einen geringeren Fehler und jeder Block repräsentiert eine eindeutige Kombination aus Spaltenabtastung und Zeilenabtastung. Wenn Sie also eine zusätzliche Suche nach etwa eta (oder der Baumtiefe) durchführen möchten, erhalten Sie für jeden getesteten eta-Parameter einen dieser Plots.
Ich sehe, dass Sie eine andere Bewertungsmetrik (RMPSE) haben, schließen Sie diese einfach an die Kreuzvalidierungsfunktion an und Sie erhalten das gewünschte Ergebnis. Außerdem würde ich mir keine Sorgen um die Feinabstimmung der anderen Parameter machen, da dies die Leistung nicht allzu sehr verbessert, zumindest nicht so sehr im Vergleich dazu, mehr Zeit mit der Entwicklung von Funktionen oder der Bereinigung der Daten zu verbringen.
- Andere
Zufallssuche und Bayes'sche Parameterauswahl sind ebenfalls möglich, ich habe jedoch noch keine Implementierung gefunden.
Hier ist eine gute Einführung in die Bayes'sche Optimierung von Hyperparametern von Max Kuhn, dem Schöpfer des Caret.
http://blog.revolutionanalytics.com/2016/06/bayesian-optimization-of-machine-learning-models.html