Próbálok egy gradiensnövelő modellt betanítani több mint 50 ezer példányra, 100 numerikus jellemzővel. XGBClassifier 500-at kezel fák 43 másodpercen belül a gépemen, míg a GradientBoostingClassifier csak 10 fát (!) kezel 1 perc és 2 másodperc alatt 🙁 Nem fáradoztam azzal, hogy megpróbáljak 500 fát felnevelni, mert ez időbe telik óra. Ugyanazokat a learning_rate és max_depth beállításokat használom, lásd alább.

Mitől annyira XGBoost gyorsabban? Használ valamilyen újszerű megoldást a gradiens növelésére, amelyet a sklearn srácok nem ismernek? Vagy “sarkok vágása” és sekélyebb fák növesztése?

ps “Tudatában vagyok ennek a vitának: https://www.kaggle.com/c/higgs-boson/forums/t/10335/xgboost-post-competition-survey , de a választ nem tudtam megkapni …

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) 

Megjegyzések

  • gondolom, ' hamarosan át kell fogalmaznom, hogy " miért sokkal gyorsabb a LightGBM, mint az XGBoost? " 🙂

Válasz

Mivel Ön megemlíti a “numerikus” szót “jellemzők, azt hiszem, a jellemzői nem kategorikusak és magas aritásúak (sokféle értéket vehetnek fel, és így nagyon sok lehetséges osztási pont van). Ilyen esetben a fák megnövekedése nehezen megy, mivel [sok funkciót $ \ times $ sok osztott pontot] kell értékelni.

Gondolom, hogy a legnagyobb hatást az adja, hogy az XGBoost közelítést használ a hasítási pontokra. Ha van 10000 lehetséges osztással rendelkező folyamatos funkció, akkor az XGBoost alapértelmezés szerint csak a “legjobb” 300 osztást veszi figyelembe (ez egyszerűsítés). Ezt a viselkedést a sketch_eps paraméter vezérli, és erről többet olvashat a dokumentumban . Megpróbálhatja leengedni, és ellenőrizheti a különbséget. Mivel a scikit-learn dokumentációban nincs róla szó, gondolom, hogy nem áll rendelkezésre. Megtudhatja, mi az XGBoost módszer, a cikkükben (arxiv) .

Az XGBoost közelítést is használ az ilyen osztott pontok kiértékeléséhez . Nem tudom, hogy a scikit tanulás melyik kritérium alapján értékeli a felosztásokat, de ez megmagyarázhatja az időbeli különbségek fennmaradó részét.


Megjegyzések címzése

A megosztott pontok értékelésével kapcsolatban

Mit értett azonban ezzel “Az XGBoost közelítést is használ az ilyen osztott pontok értékeléséhez”? amennyire megértem, az értékeléshez az optimális célfüggvény pontos csökkentését alkalmazzák, amint az a (7) eq-ben megjelenik.

Az osztott pont értékeléséhez ki kell számolnia $ L (y, H_ {i-1} + h_i) $ értéket, ahol $ L $ a költségfüggvény, $ y $ a cél, $ H_ {i- 1} $ az eddig épített modell, és $ h_i $ az aktuális kiegészítés. Figyelje meg, hogy az XGBoost nem ezt csinálja; Taylor Expansion segítségével egyszerűsítik a $ L $ költségfüggvényt, ami egy nagyon egyszerű függvényhez vezet a számításhoz. Ki kell számolniuk a $ L $ színátmenetet és a Hessiant a $ H_ {i-1} $ értékre vonatkozóan, és ezt a számot újból felhasználhatják az összes lehetséges osztáshoz a $ i $ szakaszban, ezáltal az overral számítás gyors. Ellenőrizheti a veszteségfüggvény közelítését a Taylor-bővítéssel (CrossValidated Q / A) további részletekért, illetve a levezetésért a cikkükben.

A lényeg, hogy megtalálták a módját, hogy hatékonyan megközelítsék a $ L (y, H_ {i-1} + h_i) $ értéket. Ha teljes egészében értékelné a $ L $ értéket, anélkül, hogy bennfentes tudás lenne, amely lehetővé teszi az optimalizálást, az elkerülést vagy a redundáns számítást, több időbe telik osztásonként. Ebben a tekintetben ez egy közelítés. Más gradiens növelő megvalósítások azonban egy proxy költségfüggvényt is használnak a felosztás értékeléséhez, és nem tudom, hogy az XGBoost közelítés gyorsabb-e ebben a tekintetben, mint a többi.

Megjegyzések

  • Köszönöm @Winks, elolvastam a cikket, és megláttam, mit értesz a megosztott jelöltek kiválasztásának közelítő algoritmusán. Azonban mit értett " alatt az XGBoost szintén közelítést használ az ilyen osztott pontok értékelésénél "? amennyire megértem, az értékeléshez az optimális célfüggvény pontos csökkentését alkalmazzák, amint az az eq (7) -ben szerepel.
  • Válaszomat szerkesztettem a megjegyzésed címzésére. Az osztott pontok értékelésével kapcsolatos további részletekért ellenőrizze ezt a kérdést / választ .
  • Köszönöm szépen, @Winks! nagyszerű lenne, ha itt is megválaszolhatná a kidolgozottabb kérdésemet: datascience.stackexchange.com/q/10997/16050
  • Ez remek válasz. Hat-trükk!

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük