Ich versuche, ein Steigungsverstärkungsmodell mit über 50.000 Beispielen und 100 numerischen Merkmalen zu trainieren. XGBClassifier
Bewältigt 500 Bäume innerhalb von 43 Sekunden auf meiner Maschine, während GradientBoostingClassifier
nur 10 Bäume (!) in 1 Minute und 2 Sekunden bearbeitet werden :( Ich habe nicht versucht, 500 Bäume zu züchten, da dies Stunden dauern wird. Ich verwende dasselbe learning_rate
und dieselben max_depth
Einstellungen , siehe unten.
Was macht XGBoost so viel schneller? Verwendet es eine neuartige Implementierung für Gradienten-Boosting, die Sklearn-Leute nicht kennen? Oder heißt es "Ecken abschneiden" und flachere Bäume wachsen lassen?
ps Mir ist diese Diskussion bekannt: https://www.kaggle.com/c/higgs-boson/forums/t/10335/xgboost-post-competition-survey, aber ich konnte dort keine Antwort finden ...
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)