Estoy tratando de entrenar un modelo de aumento de gradiente en más de 50k ejemplos con 100 características numéricas. XGBClassifier
maneja 500 árboles en 43 segundos en mi máquina, mientras que GradientBoostingClassifier
maneja solo 10 árboles (!) en 1 minuto y 2 segundos :( No me molesté en tratar de cultivar 500 árboles, ya que tomará horas. Estoy usando lo mismo learning_rate
y la max_depth
configuración , vea abajo.
¿Qué hace que XGBoost sea mucho más rápido? ¿Utiliza alguna implementación novedosa para aumentar el gradiente que los chicos de sklearn no conocen? ¿O es "cortar esquinas" y cultivar árboles menos profundos?
PD Estoy al tanto de esta discusión: https://www.kaggle.com/c/higgs-boson/forums/t/10335/xgboost-post-competition-survey pero no pude obtener la respuesta allí ...
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)