Yritän kouluttaa kaltevuutta lisäävää mallia yli 50 000 esimerkissä, jossa on 100 numeerista ominaisuutta. XGBClassifier
kahva 500 puita 43 sekunnissa koneellani, kun taas GradientBoostingClassifier
käsittelee vain 10 puuta (!) 1 minuutissa ja 2 sekunnissa 🙁 En vaivautunut yrittämään kasvattaa 500 puuta, koska se kestää tuntia. Käytän samoja learning_rate
ja max_depth
asetuksia, katso alla.
Mikä tekee XGBoostista niin paljon nopeammin? Käyttääkö se jotain uutta toteutusta liukuvärjäykseen, jota sklearn-kaverit eivät tiedä? Vai onko se ”nurkkien leikkaamista” ja matalampien puiden kasvattamista?
ps Olen tietoinen tästä keskustelusta: ”aa12cc1bed”>
https://www.kaggle.com/c/higgs-boson/forums/t/10335/xgboost-post-competition-survey mutta ei saanut vastausta sinne …
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)
Kommentit
- kai ' ll on pian muotoiltava se uudelleen nimellä " miksi LightGBM on niin paljon nopeampi kuin XGBoost? " 🙂
Vastaa
Koska mainitset numeron ”ominaisuudet, luulen, että ominaisuutesi eivät ole kategorisia ja niillä on suuri ariteetti (ne voivat viedä paljon erilaisia arvoja, ja siten on paljon mahdollisia jakopisteitä). Tällöin puiden kasvaminen on vaikeaa, koska [monia ominaisuuksia $ \ kertaa $ paljon jakopisteitä] on arvioitava.
Arvaukseni on, että suurin vaikutus johtuu siitä, että XGBoost käyttää likiarvoa jakopisteisiin. Jos sinulla on jatkuva ominaisuus, jossa on 10000 mahdollista jakoa, XGBoost pitää oletusarvoisesti vain ”parasta” 300 jakoa (tämä on yksinkertaistettu). Tätä käyttäytymistä ohjaa parametri sketch_eps
, ja voit lukea siitä lisää asiakirjasta . Voit yrittää laskea sitä ja tarkistaa sen tekemän eron. Koska sitä ei mainita scikit-learn -dokumentaatiossa , luulen, että se ei ole käytettävissä. Voit oppia, mikä XGBoost-menetelmä on heidän paperissaan (arxiv) .
XGBoost käyttää myös likiarvoa tällaisten jakopisteiden arvioinnissa . En tiedä, millä kriteerillä scikit oppia arvioi halkeamia, mutta se voisi selittää loput aikaerot.
Kommenttien osoite
Jaettujen pisteiden arvioinnista
Mitä tarkoitit ”XGBoost käyttää myös likiarvoa tällaisten jakopisteiden arvioinnissa”? sikäli kuin ymmärrän, he käyttävät arviointia varten optimaalisen tavoitefunktion tarkkaa pienennystä, kuten se ilmenee artikkelin eq: stä (7).
Jakopisteen arvioimiseksi sinun on laskettava $ L (y, H_ {i-1} + h_i) $, jossa $ L $ on kustannusfunktio, $ y $ tavoite, $ H_ {i- 1} $ tähän asti rakennettu malli ja $ h_i $ nykyinen lisäys. Huomaa, että XGBoost ei tee tätä; ne yksinkertaistavat kustannusfunktiota $ L $ Taylor-laajennuksella, mikä johtaa hyvin yksinkertaiseen laskutoimintoon. Heidän on laskettava $ L $: n gradientti ja hessiaani suhteessa $ H_ {i-1} $: iin, ja he voivat käyttää näitä lukuja uudelleen kaikkiin potentiaalisiin jakoihin vaiheessa $ i $, mikä tekee ylikuumenemisen nopeasti. Voit tarkistaa Häviöfunktion lähentäminen Taylor-laajennuksella (CrossValidated Q / A) saadaksesi lisätietoja tai johdon heidän paperistaan.
kohta on, että he ovat löytäneet tavan arvioida $ L (y, H_ {i-1} + h_i) $ tehokkaasti. Jos arvioisit $ L $: n kokonaisuudessaan ilman sisäpiiritietoa, joka mahdollistaisi optimoinnin tai välttämisen tai tarpeettoman laskennan, se vie enemmän aikaa jakoa kohti. Tässä suhteessa se on arvio. Muissa kaltevuutta lisäävissä toteutuksissa käytetään kuitenkin välityspalvelukustannustoimintoja jakojen arvioimiseksi, enkä tiedä, onko XGBoost-likiarvostus tässä suhteessa nopeampaa kuin muut.
Kommentit
- Kiitos @Winks, luin paperin ja huomasin, mitä tarkoitit lähentelyalgoritmilla jaettujen ehdokkaiden valinnassa. Mitä tarkoitit kuitenkin " XGBoost käyttää myös likiarvoa tällaisten jakopisteiden arvioinnissa "? sikäli kuin ymmärrän, he käyttävät arviointia varten optimaalisen tavoitefunktion tarkkaa pienentämistä, kuten se näkyy artikkelin eq: ssä (7).
- Muokkasin vastaustani osoittaakseni kommenttisi. Tarkista tämä Q / A saadaksesi lisätietoja jaettujen pisteiden arvioinnista.
- Kiitos paljon, @Winks! olisi hienoa, jos voisit myös vastata yksityiskohtaisempaan kysymykseeni täällä: datascience.stackexchange.com/q/10997/16050
- Tämä on loistava vastaus. Hattutemppu!