Próbuję wytrenować model zwiększania gradientu na ponad 50 tysiącach przykładów ze 100 funkcjami numerycznymi. XGBClassifier
obsługuje 500 drzew w ciągu 43 sekund na mojej maszynie, a GradientBoostingClassifier
obsługuje tylko 10 drzew (!) w 1 minutę i 2 sekundy :( Nie zawracałem sobie głowy próbą wyhodowania 500 drzew, ponieważ zajmie to godziny. Używam tego samego learning_rate
i max_depth
ustawień patrz poniżej.
Co sprawia, że XGBoost jest o wiele szybszy? Czy wykorzystuje jakąś nowatorską implementację do zwiększania gradientu, której faceci nie wiedzą? A może jest to „ścinanie zakrętów” i wzrost płytszych drzew?
ps Jestem świadomy tej dyskusji: https://www.kaggle.com/c/higgs-boson/forums/t/10335/xgboost-post-competition-survey, ale nie mogłem tam znaleźć odpowiedzi ...
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)