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)
źródło
Odpowiedzi:
Domyślam się, że największy efekt wynika z faktu, że XGBoost używa przybliżenia punktów podziału. Jeśli masz funkcję ciągłą z 10000 możliwymi podziałami, XGBoost domyślnie bierze pod uwagę tylko „najlepsze” 300 podziałów (jest to uproszczenie). To zachowanie jest kontrolowane przez
sketch_eps
parametr i możesz przeczytać więcej na ten temat w dokumencie . Możesz spróbować go obniżyć i sprawdzić różnicę. Ponieważ nie ma wzmianki o tym w dokumentacji scikit-learn , myślę, że nie jest ona dostępna. Możesz dowiedzieć się, jaka jest metoda XGBoost w ich pracy (arxiv) .XGBoost stosuje również przybliżenie oceny takich punktów podziału. Nie wiem, według którego kryterium scikit uczy się ocenia podziały, ale mogłoby to wyjaśnić resztę różnicy czasu.
Adresowanie komentarzy
Odnośnie oceny punktów podziału
źródło