Saya mencoba untuk melatih model peningkatan gradien lebih dari 50k contoh dengan 100 fitur numerik. XGBClassifier
menangani 500 pohon dalam waktu 43 detik pada mesin saya, sementara GradientBoostingClassifier
hanya menangani 10 pohon (!) dalam 1 menit dan 2 detik :( Saya tidak repot-repot mencoba menumbuhkan 500 pohon karena akan memakan waktu berjam-jam. Saya menggunakan pengaturan learning_rate
dan max_depth
pengaturan yang sama , Lihat di bawah.
Apa yang membuat XGBoost jauh lebih cepat? Apakah itu menggunakan beberapa implementasi baru untuk meningkatkan gradien yang tidak diketahui orang-orang sklearn? Atau apakah itu "memotong sudut" dan menumbuhkan pohon dangkal?
ps Saya mengetahui diskusi ini: https://www.kaggle.com/c/higgs-boson/forums/t/10335/xgboost-post-competition-survey tetapi tidak bisa mendapatkan jawabannya di sana ...
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)
sumber
Jawaban:
Dugaan saya adalah bahwa efek terbesar berasal dari fakta bahwa XGBoost menggunakan perkiraan pada titik perpecahan. Jika Anda memiliki fitur terus-menerus dengan 10000 kemungkinan pemisahan, XGBoost hanya mempertimbangkan 300 pemisahan terbaik "" (ini adalah penyederhanaan). Perilaku ini dikendalikan oleh
sketch_eps
parameter, dan Anda dapat membaca lebih lanjut tentang hal itu di doc . Anda dapat mencoba menurunkannya dan memeriksa perbedaannya. Karena tidak disebutkan dalam dokumentasi scikit-learn , saya kira itu tidak tersedia. Anda dapat mempelajari metode XGBoost di dalam makalahnya (arxiv) .XGBoost juga menggunakan perkiraan pada evaluasi titik perpecahan tersebut. Saya tidak tahu kriteria scikit belajar mana yang mengevaluasi pemisahan, tetapi bisa menjelaskan perbedaan waktu yang tersisa.
Komentar Adressing
Mengenai evaluasi poin split
sumber