GBDT預測時每一棵樹是否能並行?
01-22
GBDT在構建的時候,每一輪都必須依賴前一輪的梯度殘差,所以一輪與一輪之間不能並行,在每一輪構建樹的時候內部可以有並行的優化,但這不是我要問的重點,我想問的是GBDT在做預測的時候每一棵樹是否能並行?想不明白了!!!我認為是可以並行的,但是我認識的一個同學說不能!說預測的時候必須要依賴上一輪的結果,我推來推去就是覺得可以並行!普通的adaboost可以並行,我自己也實現過類似的boost的程序,但因為下一輪必須依賴上一輪的結果所以不能並行。
預測的時候可以並行的。訓練的時候下一輪的目標值依賴上一輪的結果,需要iteratively fits,不能並行。而預測的時候每棵樹都已經建好,輸入是原始數據,輸出是把每棵樹的預測值加在一起,這也MART(muliple additive regression trees)得名的由來,預測過程樹之間並沒有依賴,不存在先算後算的問題,所以可以並行。
過程可以參見ESL書中第361頁的演算法偽代碼,如下:預測其實就是2.d和3,每一棵樹的輸出是,其中參數都在建樹時確定的,每棵樹的輸入都是測試數據,也不會互享干擾。
用xgboost的吧,專門用來並行化實現boosting的框架,支持python/java/spark/R/julia等介面,方便的很。
https://github.com/dmlc/xgboost
Scalable, Portable and Distributed Gradient Boosting (GBDT, GBRT or GBM) Library, for Python, R, Java, Scala, C++ and more. Runs on single machine, Hadoop, Spark, Flink and DataFlow推薦閱讀:
※如何評價中山大學鄭子彬教授?
※如何求出libsvm中每個樣本點到超平面的歐式距離?
※一張圖片上有上百種顏色,如何在一張圖上篩選出小於五種的基本色,或者在一張圖上進行顏色劃分歸類?
※為何DL在NLP效果並不是特別好但是Stanford卻開設cs224d這門課?
※簡單解釋一下sparse autoencoder, sparse coding和restricted boltzmann machine的關係?