Estou tentando treinar um modelo de aumento de gradiente com mais de 50 mil exemplos com 100 recursos numéricos. XGBClassifier
lida com 500 árvores em 43 segundos na minha máquina, enquanto GradientBoostingClassifier
lida com apenas 10 árvores (!) em 1 minuto e 2 segundos :( Não me preocupei em tentar cultivar 500 árvores, pois levará horas. Estou usando o mesmo learning_rate
e max_depth
configurações , ver abaixo.
O que torna o XGBoost muito mais rápido? Ele usa alguma implementação inovadora para aumentar o gradiente que os sklearn não sabem? Ou é "cortar cantos" e cultivar árvores rasas?
ps Estou ciente dessa discussão: https://www.kaggle.com/c/higgs-boson/forums/t/10335/xgboost-post-competition-survey, mas não consegui encontrar a resposta lá ...
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)