J'ai une classe de données déséquilibrées et je veux régler les hyperparamètres du tress renforcé à l'aide de xgboost.
Des questions
- Existe-t-il un équivalent de gridsearchcv ou randomsearchcv pour xgboost?
- Si non, quelle est l'approche recommandée pour ajuster les paramètres de xgboost?
machine-learning
cross-validation
xgboost
boosting
GeorgeOfTheRF
la source
la source
xgboost(max.depth)
ouxgb.train(max_depth)
? Xgboost utilise-t-il de manière incohérente le point et le trait de soulignement pour le paramètre à différents endroits? Ou sont-ils convertis?Réponses:
Depuis l'interface
xgboost
encaret
a récemment changé, voici un script qui fournit une procédure pas à pas entièrement commenté l' utilisationcaret
de syntoniserxgboost
hyper-paramètres.Pour cela, je vais utiliser les données d'entraînement du concours Kaggle "Give Me Some Credit" .
1. Adapter un
xgboost
modèleDans cette section, nous:
xgboost
modèle avec des hyperparamètres arbitrairesxgb.cv
)Voici un code pour le faire.
Voici à quoi ressemble la AUC de test versus formation:
2. Recherche hyperparamètre en utilisant
train
Pour la recherche d'hyperparamètre, nous effectuons les étapes suivantes:
data.frame
combinaison unique de paramètres pour laquelle nous voulons des modèles formés.Voici un code qui montre comment faire cela.
Enfin, vous pouvez créer un diagramme à bulles pour l’AUC sur les variations de
eta
etmax_depth
:la source
xgboost
paramètres existe maintenant, en particulier pour legamma
nouveau Voici une liste complète des paramètres pris en charge.scale_pose_weight
pour une classification déséquilibrée. Pouvez-vous fournir des détails sur comment faire? Merci!scale_pos_weight
est maintenant documenté dans la documentation sur les paramètres .scale_pos_weight
n’est pas un paramètre d’ajustement caret, mais vous pouvez comparer manuellement. Dans mon cas, en utilisant le poids s'est avéré avoir peu d'effet (classification binaire,> 20% de positifs)Le paquet Caret a incorporé xgboost.
Échantillon de sortie
Un inconvénient que je vois est que d’autres paramètres de xgboost tels que le sous-échantillon, etc. ne sont pas supportés par caret actuellement.
Modifier
Gamma, colsample_bytree, min_child_weight et le sous-échantillon, etc. peuvent maintenant être réglés (juin 2017) directement à l'aide de Caret. Il suffit de les ajouter à la grille du code ci-dessus pour que cela fonctionne. Merci usr11852 pour l'avoir souligné dans le commentaire.
la source
caret
maintenant (février 2017) prend en charge des paramètres supplémentaires pourgamma
,colsample_bytree
,min_child_weight
etsubsample
. (Donc, effectivement, vous pouvez accorder presque tout - compte tenu du temps)Je sais que c'est une vieille question, mais j'utilise une méthode différente de celle ci-dessus. J'utilise la fonction BayesianOptimization du package d'optimisation bayesienne pour trouver les paramètres optimaux. Pour ce faire, vous devez d’abord créer des plis de validation croisée, puis créer une fonction
xgb.cv.bayes
ayant pour paramètres les paramètres hyper boostants que vous souhaitez modifier. Dans cet exemple, je suis à l'écoutemax.depth, min_child_weight, subsample, colsample_bytree, gamma
. Vous appelez ensuitexgb.cv
cette fonction avec les paramètres hyper définis dans les paramètres d'entrée dexgb.cv.bayes
. Ensuite, vous appelezBayesianOptimization
avecxgb.cv.bayes
et les plages souhaitées des hyper paramètres de boosting.init_points
est le nombre de modèles initiaux avec des hyper-paramètres pris au hasard dans les plages spécifiées, etn_iter
est le nombre de tours de modèles après les points initiaux. La fonction fournit tous les paramètres de renforcement et l’AUC de test.la source
C'est une question plus ancienne, mais je pensais partager comment j'accordais les paramètres xgboost. Au départ, je pensais que j'utiliserais caret pour cela, mais j'ai récemment découvert un problème concernant tous les paramètres ainsi que les valeurs manquantes. J'envisageais également d'écrire une boucle itérative à travers différentes combinaisons de paramètres, mais je voulais qu'elle s'exécute en parallèle et demanderait trop de temps. L'utilisation de gridSearch à partir du package NMOF fournissait le meilleur des deux mondes (tous les paramètres ainsi que le traitement en parallèle). Voici un exemple de code pour la classification binaire (fonctionne sur Windows et Linux):
la source