Chaque fois que je travaille avec xgboost, je fais souvent ma propre recherche de paramètres homebrew mais vous pouvez le faire avec le package caret comme KrisP vient d'être mentionné.
- Caret
Voir cette réponse sur Cross Validated pour une explication approfondie sur la façon d'utiliser le package caret pour la recherche d'hyperparamètre sur xgboost.
Comment régler les hyperparamètres des arbres xgboost?
- Recherche de grille personnalisée
Je commence souvent par quelques hypothèses basées sur les diapositives d' Owen Zhang sur les conseils pour la science des données P. 14
Ici, vous pouvez voir que vous devrez principalement régler l'échantillonnage des lignes, l'échantillonnage des colonnes et peut-être la profondeur maximale de l'arbre. Voici comment effectuer un échantillonnage de ligne et une recherche d'échantillonnage de colonne personnalisés pour un problème sur lequel je travaille en ce moment:
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))
})
Et combiné avec de la magie ggplot2 en utilisant les résultats de cette fonction d'application, vous pouvez tracer une représentation graphique de la recherche.
Dans ce graphique, des couleurs plus claires représentent une erreur plus faible et chaque bloc représente une combinaison unique d'échantillonnage de colonne et d'échantillonnage de ligne. Donc, si vous souhaitez effectuer une recherche supplémentaire de disons eta (ou profondeur d'arbre), vous vous retrouverez avec l'un de ces tracés pour chaque paramètre eta testé.
Je vois que vous avez une métrique d'évaluation différente (RMPSE), branchez-la simplement dans la fonction de validation croisée et vous obtiendrez le résultat souhaité. En plus de cela, je ne m'inquiéterais pas trop du réglage fin des autres paramètres car cela n'améliorera pas trop les performances, du moins pas autant que de passer plus de temps à concevoir des fonctionnalités ou à nettoyer les données.
- Autres
La recherche aléatoire et la sélection des paramètres bayésiens sont également possibles mais je n'ai pas encore fait / trouvé une implémentation.
Voici une bonne introduction à l'optimisation bayésienne des hyperparamètres par Max Kuhn créateur de caret.
http://blog.revolutionanalytics.com/2016/06/bayesian-optimization-of-machine-learning-models.html
rBayesianOptimization
package rend la mise en œuvre de BO assez simpleVous pouvez utiliser le package caret pour effectuer une recherche d'espace hyperparamétrique, soit par une recherche dans la grille , soit par une recherche aléatoire .
la source
Grille, aléatoire, bayésien et PSO ... etc.
Lorsque vous travaillez avec XGBoost, tout ce qui précède n'a pas d'importance, car XGB est très rapide, vous pouvez donc utiliser Grid avec de nombreux hyperparamètres jusqu'à ce que vous trouviez la solution.
Une chose qui peut vous aider: utilisez la méthode approx, elle me donne toujours l'erreur mse la plus faible.
la source