J'essaie de former un modèle d'augmentation de gradient sur plus de 50k exemples avec 100 fonctionnalités numériques. XGBClassifier
gère 500 arbres en 43 secondes sur ma machine, alors qu'il GradientBoostingClassifier
ne gère que 10 arbres (!) en 1 minute et 2 secondes :( Je n'ai pas pris la peine d'essayer de faire pousser 500 arbres car cela prendra des heures. J'utilise les mêmes paramètres learning_rate
et max_depth
, voir ci-dessous.
Qu'est-ce qui rend XGBoost beaucoup plus rapide? Utilise-t-il une nouvelle implémentation pour augmenter le gradient que les gars de Sklearn ne connaissent pas? Ou s'agit-il de "couper les coins" et de faire pousser des arbres moins profonds?
ps Je suis au courant de cette discussion: https://www.kaggle.com/c/higgs-boson/forums/t/10335/xgboost-post-competition-survey mais je n'ai pas pu y trouver la réponse ...
XGBClassifier(base_score=0.5, colsample_bylevel=1, colsample_bytree=1,
gamma=0, learning_rate=0.05, max_delta_step=0, max_depth=10,
min_child_weight=1, missing=None, n_estimators=500, nthread=-1,
objective='binary:logistic', reg_alpha=0, reg_lambda=1,
scale_pos_weight=1, seed=0, silent=True, subsample=1)
GradientBoostingClassifier(init=None, learning_rate=0.05, loss='deviance',
max_depth=10, max_features=None, max_leaf_nodes=None,
min_samples_leaf=1, min_samples_split=2,
min_weight_fraction_leaf=0.0, n_estimators=10,
presort='auto', random_state=None, subsample=1.0, verbose=0,
warm_start=False)