Arbres boostés par gradient XGBoost vs Python Sklearn

20

J'essaie de comprendre comment fonctionne XGBoost. Je comprends déjà comment les arbres boostés par le gradient fonctionnent sur Python sklearn. Ce qui n'est pas clair pour moi, c'est si XGBoost fonctionne de la même manière, mais plus rapidement, ou s'il existe des différences fondamentales entre celui-ci et l'implémentation de python.

Quand j'ai lu cet article

http://learningsys.org/papers/LearningSys_2015_paper_32.pdf

Il me semble que le résultat final provenant de XGboost est le même que dans l'implémentation Python, mais la principale différence est de savoir comment XGboost trouve la meilleure division à faire dans chaque arbre de régression.

Fondamentalement, XGBoost donne le même résultat, mais il est plus rapide.

Est-ce correct ou y a-t-il autre chose qui me manque?

Assez ringard
la source

Réponses:

18

Vous avez raison, XGBoost («eXtreme Gradient Boosting») et GradientBoost de sklearn sont fondamentalement les mêmes car ils sont tous deux des implémentations de renforcement de gradient.

Cependant, il existe des différences très importantes sous le capot dans un sens pratique. XGBoost est beaucoup plus rapide (voir http://machinelearningmastery.com/gentle-introduction-xgboost-applied-machine-learning/ ) que sklearn. XGBoost est assez efficace en mémoire et peut être parallélisé (je pense que sklearn ne peut pas le faire par défaut, je ne connais pas exactement l'efficacité de la mémoire de sklearn mais je suis assez confiant qu'il est inférieur à XGBoost).

Après avoir utilisé les deux, la vitesse de XGBoost est assez impressionnante et ses performances sont supérieures à GradientBoosting de sklearn.

K88
la source
1
Il existe également une différence de performances. Xgboost a utilisé des dérivées secondes pour trouver la constante optimale dans chaque nœud terminal. L'implémentation standard utilise uniquement la dérivée première.
Zelazny7
@ Zelazny7 Avez-vous des références pour votre déclaration? On pourrait s'attendre à ce que le calcul des dérivées 2e dégraderait les performances. Cela signifierait également que quelque chose en plus (n'importe quelle saveur) de descente de gradient était utilisé.
meh
2
Questions et réponses pertinentes sur Datascience: Pourquoi xgboost est-il tellement plus rapide que sklearn et ici os Stats: Fonction de perte XGBoost Approximation With Taylor Expansion
Clins d'
Confirmation @ poste de K88, de sklearn GradientBoostingClassifier ne dispose pas d' un n_jobsparamètre interface disponible; le traitement parallèle n'est pas possible en interne avec l'implémentation de l'algorithme par sklearn.
bmc
7

Contrairement au renforcement du gradient de Sklearn, Xgboost effectue également la régularisation de l'arbre pour éviter le sur-ajustement et traite également les valeurs manquantes de manière efficace. Le lien suivant peut être utile pour apprendre précisément xgboost https://www.youtube.com/watch?v=Vly8xGnNiWs

Harshit Mehta
la source
Le GBM de SkLearn effectue la régularisation via le paramètre learning_rate.
Teja Chebrole
1

XGboost est la mise en œuvre du GBDT avec randmisation (il utilise l'échantillonnage des colonnes et l'échantillonnage des lignes) .L'échantillonnage des lignes est possible en n'utilisant pas toutes les données d'apprentissage pour chaque modèle de base du GBDT. Au lieu d'utiliser toutes les données d'apprentissage pour chaque modèle de base, nous échantillonnons un sous-ensemble de lignes et utilisons uniquement ces lignes de données pour créer chacun des modèles de base. Cela garantit qu'il y a moins de risques de sur-ajustement, ce qui est un problème majeur avec le GBDT simple que XGBoost essaie de résoudre en utilisant cette randomisation.

Hemanth
la source