xgboost dans R: comment xgb.cv transmet les paramètres optimaux à xgb.train
J'ai été d'explorer la xgboost
paquet dans R et est passé par plusieurs démos ainsi que des tutoriels mais cela me confond: après l'utilisation de xgb.cv
de faire de la validation croisée, comment fonctionne l'optimisation des paramètres se passait à xgb.train
? Ou dois-je calculer les paramètres idéal (comme nround
max.depth
) basé sur la sortie de xgb.cv
?
param <- list("objective" = "multi:softprob",
"eval_metric" = "mlogloss",
"num_class" = 12)
cv.nround <- 11
cv.nfold <- 5
mdcv <-xgb.cv(data=dtrain,params = param,nthread=6,nfold = cv.nfold,nrounds = cv.nround,verbose = T)
md <-xgb.train(data=dtrain,params = param,nround = 80,watchlist = list(train=dtrain,test=dtest),nthread=6)
source d'informationauteur snowneji
Vous devez vous connecter pour publier un commentaire.
Dirait que vous vous êtes mal compris
xgb.cv
il n'est pas un paramètre de la fonction de recherche. Il ne k-plis de la validation croisée, rien de plus.Dans votre code, il ne change pas la valeur de
param
.Pour trouver les meilleurs paramètres de R XGBoost, il existe quelques méthodes. Ces 2 méthodes,
(1) l'Utilisation
mlr
paquet, http://mlr-org.github.io/mlr-tutorial/release/html/Il y a un XGBoost + mlr exemple de code dans le Kaggle Prudentielle de défi,
Mais que le code est pour la régression, pas de classement. Autant que je sache, il n'y a pas de
mlogloss
métrique encore dansmlr
package, vous devez le code de la mlogloss de mesure à partir de zéro par vous-même. CMIIW.(2) Deuxième méthode, en réglant manuellement les paramètres, puis répéter, par exemple,
Ensuite, vous y trouverez le meilleur (minimum) mlogloss,
min_logloss
est la valeur minimum de mlogloss, tandis quemin_logloss_index
est l'index (rond).Vous devez répéter le processus ci-dessus à plusieurs reprises, chaque fois de modifier les paramètres manuellement (
mlr
ne le répétez l'opération pour vous). Jusqu'à ce que finalement vous recevez le meilleur minimum globalmin_logloss
.Remarque: Vous pouvez le faire dans une boucle de 100 ou 200 itérations, dans lequel, pour chaque itération, vous définissez les paramètres de la valeur au hasard. De cette façon, vous devez enregistrer le meilleur
[parameters_list, min_logloss, min_logloss_index]
dans des variables ou dans un fichier.Remarque: mieux définir aléatoire par
set.seed()
pour reproductible résultat. Aléatoire différent, les rendements en graines résultat différent. Ainsi, vous devez vous enregistrer[parameters_list, min_logloss, min_logloss_index, seednumber]
dans les variables ou d'un fichier.Dire que, finalement, vous obtenez 3 résultats en 3 itérations/répétitions:
Ensuite, vous devez utiliser la troisième paramètres (il a un minimum global
min_logloss
de1.9745
). Votre meilleur indice (nrounds) est780
.Une fois que vous obtenez le meilleur des paramètres, de l'utiliser dans la formation,
Je ne pense pas que vous avez besoin
watchlist
dans la formation, parce que vous avez fait de la validation croisée. Mais si vous voulez continuer à utiliserwatchlist
il est juste correct.Même mieux, vous pouvez utiliser dès le début de s'arrêter dans
xgb.cv
.Avec ce code, lorsque
mlogloss
valeur ne diminue pas en 8 étapes, lexgb.cv
va s'arrêter. Vous pouvez gagner du temps. Vous devez définirmaximize
àFALSE
parce que vous vous attendez minimum mlogloss.Voici un exemple de code, avec 100 itérations de la boucle, et au hasard des paramètres choisis.
Avec ce code, vous exécutez la validation croisée 100 fois, chaque fois avec des paramètres aléatoires. Ensuite, vous obtenez le meilleur jeu de paramètres, qui est dans l'itération avec un minimum de
min_logloss
.Augmentation de la valeur de
early.stop.round
dans le cas où vous trouvez que c'est trop petit (trop tôt, l'arrêt). Vous devez également modifier le paramètre aléatoire de la valeur limite en fonction de vos caractéristiques de données.Et, pour 100 ou 200 itérations, je pense que vous souhaitez modifier
verbose
à FALSE.Note de côté: Qui est un exemple de méthode aléatoire, vous pouvez l'ajuster par exemple par Bayésien d'optimisation pour une meilleure méthode. Si vous avez une version de Python de XGBoost, il y a une bonne hyper-paramètre de script pour XGBoost, https://github.com/mpearmain/BayesBoost à la recherche de meilleures paramètres définis à l'aide de Bayésienne d'optimisation.
Edit: je veux ajouter un 3ème méthode manuelle, publiée par "Davut Polat" un Kaggle maître, dans la Kaggle forum.
Edit: Si vous connaissez Python et sklearn, vous pouvez également utiliser GridSearchCV avec xgboost.XGBClassifier ou xgboost.XGBRegressor
C'est une bonne question et une grande réponse de silo avec beaucoup de détails! Je l'ai trouvé très utile pour quelqu'un de nouveau à
xgboost
comme moi. Je vous remercie. La méthode aléatoire et par rapport à la limite est très inspirant. Bon à utiliser et bon à savoir. Maintenant, en 2018, d'une légère réviser sont nécessaires, par exemple,early.stop.round
devrait êtreearly_stopping_rounds
. La sortiemdcv
est organisé de façon légèrement différente:Et dépend de l'application (linéaire, logistique,etc...), le
objective
eval_metric
et les paramètres doivent être ajustés en conséquence.Pour la commodité de n'importe qui qui est en cours d'exécution d'une régression, ici, c'est le peu modifié la version de code (la plupart sont les mêmes que ci-dessus).