2017-08-26 5 views
0

Je passais par l'article here mais je ne comprends pas complètement les détails concernant la fonction CV et le paramètre "nombre d'arbres" dans xgboost. Supposons que nous commencions par une base de données de caractéristiques et de valeurs cibles. Que fait CV à chaque tour? Si le résultat du CV comporte 500 lignes (c'est-à-dire qu'il y a 500 arbres de décision), comment chaque arbre est-il construit? Et comment les 500 arbres sont-ils combinés pour produire un seul numéro de perte de log?xgboost CV et nombre d'arbres

Si nous pouvons obtenir une seule prédiction de la fonction CV, pourquoi avons-nous besoin de XGBClassifier.fit qui produit également un modèle (donc un numéro de perte)?

Merci.

Répondre

1

Xgboost est une méthode de renforcement de gradient, en tant que tel, il ajoute des arbres à chaque itération pour améliorer la précision de la prédiction. Voir l'introduction dans cet article pour avoir une idée de la façon dont le renforcement de gradient fonctionne: https://www.analyticsvidhya.com/blog/2016/02/complete-guide-parameter-tuning-gradient-boosting-gbm-python/. Cela devrait expliquer comment les arbres sont construits.

La précision de la prédiction augmente lorsque vous ajoutez de plus en plus d'arbres jusqu'à ce que vous commenciez à être surcoupés, à quel point la précision de la prédiction diminue. Vous devez donc trouver le nombre optimal d'arbres.

Il est fondamentalement impossible de deviner ce numéro dès le départ. C'est pour ça que xgboost.cv est pour. Il partitionne vos données d'entraînement en deux sous-ensembles. Le premier sous-ensemble est utilisé pour former xgboost, le second est utilisé comme jeu de validation. Après chaque itération (qui ajoute un arbre supplémentaire), xgboost calcule la nouvelle erreur de validation. Avec ce xgboost est capable de détecter quand il commence à overfit (quand l'erreur de validation commence à augmenter). Cela vous donnera le nombre optimal d'arbres pour un ensemble donné d'hyperparamètres.

Notez que le fichier xgboost.cv renvoie un historique d'évaluation (une liste), alors que xgboost.train renvoie un rappel.

Notez également que xgboost.fit fait partie de l'enveloppe sklearn (mieux vaut ne pas le comparer à xgboost.cv qui fait partie de l'API d'apprentissage xgboost).

Et en guise de note finale: Vous n'avez pas besoin de xgboost.cv pour trouver le nombre optimal d'arbres. Vous pouvez également lancer xgboost.train avec l'ensemble "early_stopping_rounds".

Si vous avez des questions faites le moi savoir dans les commentaires.

+0

Je suis encore confus à quoi sert 'xgb.cv'? juste pour lister l'histoire? –