Xgboost: Approche (documentation) ambiguïté

Créé le 25 nov. 2015  ·  3Commentaires  ·  Source: dmlc/xgboost

Salut, j'essaie de comprendre l'approche xgboost pour la formation de modèles. J'entends par là ce qui suit. Je peux soit utiliser Booster et invoquer xgb.train, soit utiliser les API sklearn pour utiliser Classifier/Regressor. Le problème selon lequel dans l'approche précédente (selon la documentation xgboost), je dois spécifier le nombre d'itérations de boost et ne spécifier aucun nombre d'arbres, tandis que plus tard, je spécifie le nombre d'arbres boostés à adapter, mais je n'ai aucune option pour spécifier le nombre d'itérations boostées. Le nombre d'itérations de boost est-il le nombre d'estimateurs ? Quelqu'un peut-il clarifier cela?

Si je lis le code correctement, les API sklearn utilisent un booster interne, je peux donc attribuer clf._Booster à mon xgb.train où n_estimators est égal au nombre de tours boostés. Et, je n'ai pas besoin d'appeler clf.fit si une telle affectation a été faite. Ai-je raison? Si c'est le cas, la documentation peut-elle être ajustée pour dire explicitement que n_estimators est ce que num_rounds a utilisé pour xgb.train.

Ce serait bien d'avoir une documentation qui explique exactement la relation entre l'approche booster de bas niveau et les API sklearn, je comprends que plus tard appellera l'ancienne, mais ce serait bien de comprendre comment c'est fait et de clarifier cela dans la documentation pour éviter toute confusion pour la fin -utilisateurs.

Commentaire le plus utile

Salut Vladimir,

Le boosting, en général, est un méta-algorithme qui entraîne de manière itérative (ou par « tours ») une séquence d'apprenants simples/faibles (ou estimateurs) de manière à ce que l'ensemble de la combinaison soit plus performant. Il peut y avoir différents types d'apprenants faibles, pas seulement des arbres. Par exemple, xgboost a des arbres et des options de modèle linéaire (généralisé). Curieusement, ces apprenants faibles dans xgboost sont appelés « boosters », et l'ensemble du modèle de combinaison est appelé « apprenant ». Cela m'a un peu rendu perplexe lorsque je lisais pour la première fois la documentation et le code de xgboost, car c'était en quelque sorte l'inverse de ma propre empreinte mentale de la terminologie.

Bien qu'il serait bien d'avoir une nomenclature cohérente entre différents projets liés au même sujet et d'avoir une documentation de liaison croisée cohérente de haute qualité, ce n'est pas toujours faisable ou facilement maintenable, en particulier dans les projets open source. Les utilisateurs novices ont tendance à utiliser principalement une seule interface. Les utilisateurs qui connaissent bien le sujet seraient facilement en mesure de cartographier les points communs. Et quiconque se soucie des détails de bas niveau, ils se soucient généralement assez pour lire le code.

En ce qui concerne votre question spécifique, vous lisez bien que le paramètre n_estimators dans le code wrapper sklearn [1] correspond à num_boost_round dans train [2]. Cependant, pourquoi, en tant qu'utilisateur final, voudriez-vous pirater un objet wrapper sklearn de cette façon ? Pour le faire de manière contrôlable, il faudrait plutôt bien connaître le code du wrapper.

[1] https://github.com/dmlc/xgboost/blob/2859c190cd0d168df25e2a7ea2b1fd5211ce94f0/python-package/xgboost/sklearn.py#L185
[2] https://github.com/dmlc/xgboost/blob/83e61bf99ec7d01607867b4e281da283230883b1/python-package/xgboost/training.py#L12

Tous les 3 commentaires

Salut Vladimir,

Le boosting, en général, est un méta-algorithme qui entraîne de manière itérative (ou par « tours ») une séquence d'apprenants simples/faibles (ou estimateurs) de manière à ce que l'ensemble de la combinaison soit plus performant. Il peut y avoir différents types d'apprenants faibles, pas seulement des arbres. Par exemple, xgboost a des arbres et des options de modèle linéaire (généralisé). Curieusement, ces apprenants faibles dans xgboost sont appelés « boosters », et l'ensemble du modèle de combinaison est appelé « apprenant ». Cela m'a un peu rendu perplexe lorsque je lisais pour la première fois la documentation et le code de xgboost, car c'était en quelque sorte l'inverse de ma propre empreinte mentale de la terminologie.

Bien qu'il serait bien d'avoir une nomenclature cohérente entre différents projets liés au même sujet et d'avoir une documentation de liaison croisée cohérente de haute qualité, ce n'est pas toujours faisable ou facilement maintenable, en particulier dans les projets open source. Les utilisateurs novices ont tendance à utiliser principalement une seule interface. Les utilisateurs qui connaissent bien le sujet seraient facilement en mesure de cartographier les points communs. Et quiconque se soucie des détails de bas niveau, ils se soucient généralement assez pour lire le code.

En ce qui concerne votre question spécifique, vous lisez bien que le paramètre n_estimators dans le code wrapper sklearn [1] correspond à num_boost_round dans train [2]. Cependant, pourquoi, en tant qu'utilisateur final, voudriez-vous pirater un objet wrapper sklearn de cette façon ? Pour le faire de manière contrôlable, il faudrait plutôt bien connaître le code du wrapper.

[1] https://github.com/dmlc/xgboost/blob/2859c190cd0d168df25e2a7ea2b1fd5211ce94f0/python-package/xgboost/sklearn.py#L185
[2] https://github.com/dmlc/xgboost/blob/83e61bf99ec7d01607867b4e281da283230883b1/python-package/xgboost/training.py#L12

y a-t-il les mêmes problèmes pour R?

Le jeu. 26 nov. 2015 à 11:39, Vadim Khotilovich <
[email protected]> a écrit :

Salut Vladimir,

Le boosting, en général, est un méta-algorithme qui itérativement (ou en
"tours") forme une séquence d'apprenants simples/faibles (ou estimateurs) dans de telles
une manière que l'ensemble de la combinaison fonctionne mieux. Il peut y avoir divers
sortes d'apprenants faibles, pas seulement des arbres. Par exemple, xgboost a des arbres et
options de modèle linéaire (généralisé). Curieusement, ces apprenants faibles en
xgboost sont appelés "boosters", et l'ensemble du modèle de combinaison est
appelé « apprenant ». Cela m'a un peu laissé perplexe quand j'étais au début
lire les documents et le code de xgboost, car c'était un peu l'inverse de mon propre mental
empreinte de la terminologie.

Bien qu'il serait bien d'avoir une nomenclature cohérente entre les différents
projets liés au même sujet et d'avoir un niveau élevé
une documentation réticulaire de qualité, ce n'est pas toujours faisable ou facilement
maintenable, en particulier dans les projets open source. Les utilisateurs novices ont tendance à
utilisent principalement une seule interface. Des utilisateurs qui connaissent bien le sujet
matière serait facilement en mesure de cartographier les points communs. Et celui qui s'en soucie
sur les détails de bas niveau, ils se soucient généralement assez pour lire le code.

Quant à votre question spécifique, vous lisez bien que les n_estimateurs
le paramètre dans le code wrapper sklearn [1] correspond à num_boost_round dans
train [2]. Cependant, pourquoi en tant qu'utilisateur final voudriez-vous pirater un sklearn
objet wrapper de cette façon? Pour le faire de manière contrôlable, vous auriez
pour bien connaître le code wrapper.

[1]
https://github.com/dmlc/xgboost/blob/2859c190cd0d168df25e2a7ea2b1fd5211ce94f0/python-package/xgboost/sklearn.py#L185
[2]
https://github.com/dmlc/xgboost/blob/83e61bf99ec7d01607867b4e281da283230883b1/python-package/xgboost/training.py#L12

-
Répondez directement à cet e-mail ou consultez-le sur GitHub
https://github.com/dmlc/xgboost/issues/651#issuecomment-159956213 .

@khotilov , merci pour l'explication. C'est suffisant pour mes besoins et je ferme le ticket.

Cette page vous a été utile?
0 / 5 - 0 notes