倚天遇到屠龙:LightGBM VS xgboost谁才是最强的梯度提升库?
更多深度文章,請關(guān)注云計(jì)算頻道:https://yq.aliyun.com/cloud
作者介紹:Laurae?,數(shù)據(jù)科學(xué)愛好者
Blog:https://medium.com/@Laurae2
背景知識:
XGBoost是一款經(jīng)過優(yōu)化的分布式梯度提升(Gradient Boosting)庫,具有高效,靈活和高可移植性的特點(diǎn)。基于梯度提升框架,XGBoost實(shí)現(xiàn)了并行方式的決策樹提升(Tree Boosting),從而能夠快速準(zhǔn)確地解決各種數(shù)據(jù)科學(xué)問題。
LightGBM(Light Gradient Boosting Machine)同樣是一款基于決策樹算法的分布式梯度提升框架。
這篇博客是關(guān)于LightGBM 和xgboost 的對比。實(shí)驗(yàn)使用了定制的博世數(shù)據(jù)集,結(jié)果顯示,在速度上xgboost?比LightGBM在慢了10倍,而我們還需要做一些其它方面的比較。
總體介紹
首先讓我們來看一下這個(gè)圖表,所有人都應(yīng)該打起精神!!!
?
從圖上我們可以看到,平均來說,LightGBM?比xgboost 快11到15倍。
我們也注意到,隨著線程數(shù)的增加,比率變小了。這也很容易解釋,因?yàn)槟悴豢赡茏尵€程的利用率是100%,線程的切入切出以及線程有時(shí)要等待,這都需要耗費(fèi)很多時(shí)間。
1–12 個(gè)線程
我們來看一下前12個(gè)線程。
?
?
從表中,我們可以看到,當(dāng)線程數(shù)超過6的時(shí)候xgboost的性能得到了很大的提升(當(dāng)線程數(shù)是12的時(shí)候,消耗時(shí)長從577.9降低到414.3秒,大約提高了28.3%)。
對于LightGBM來說是否也是這樣呢?時(shí)間從45.1降低到了33.6秒,性能提高大約25.5%。
小結(jié):使用所有邏輯核心進(jìn)行線程化,這能極大地提高性能。 如果你希望你的機(jī)器學(xué)習(xí)訓(xùn)練速度提高25%(顯然,根據(jù)CPU的不同,情況也不完全一樣),你現(xiàn)在知道該做什么:使用邏輯核心,而不是物理核心來創(chuàng)建線程。
13–24 個(gè)線程
那么13-24個(gè)線程又會怎么樣呢?我們增加12個(gè)線程作為參照。
?
?
我們可以注意到:
所以我們可以簡單的下一個(gè)結(jié)論:不要過度分配邏輯內(nèi)核,這不是一個(gè)好的做法。保持使用邏輯核心創(chuàng)建一定量的線程,并且不要超過該數(shù)。
LightGBM?一瞥
我們再來關(guān)注一下LightGBM的曲線。
?
從圖上來看,這似乎是一個(gè)線性的改進(jìn):從202秒(使用1個(gè)核,1個(gè)線程),我們下降到33.6秒(6個(gè)全部使用的,12個(gè)線程),這是幾乎100%的多線程的效率。 當(dāng)我們用更多的線程時(shí),多線程的效率急劇下降,使用的時(shí)間反而比一千場了。
數(shù)據(jù)存儲器的效率
在創(chuàng)建矩陣后使用gc方法兩次來快速查看RAM使用情況,具體情況如下:
?
?
- 初始數(shù)據(jù)(密集,未使用):約8,769 MB(27.9%vs原始版本)
- 原始數(shù)據(jù)(dgCMatrix):大約 2,448 MB(100%vs原始版本)
- xgboost(xgb.DMatrix):大約?1,701 MB(69.5%vs原始版本)
- LightGBM(lgb.Dataset):大約2,512 MB(102.6%vs原始版本)
看來LightGBM具有比xgboost更高的內(nèi)存占用。
訓(xùn)練存儲器的效率
我們使用12個(gè)線程來檢查RAM效率,在50次boosting迭代結(jié)束時(shí),在boosting之前使用gc,boosting之后不使用gc,效果如下:
xgboost:約 1684 MB
LightGBM: 1425 MB(xgboost內(nèi)存使用量的84.6%)
我們可以注意到,LightGBM在訓(xùn)練期間的RAM使用率較低,但是內(nèi)存中數(shù)據(jù)的RAM使用量增加。 所以R語言的LightGBM包有改進(jìn)的潛能,以具有更有效的方式來存儲數(shù)據(jù)。
下一個(gè)指標(biāo)
當(dāng)xgboost的快速直方圖方法啟動并在R語言中可用時(shí),我們會使用新的指標(biāo)。雖然它目前正在運(yùn)行,但在R語言中不可用。這樣一來xgboost和LightGBM孰優(yōu)孰劣到時(shí)就會揭曉。
當(dāng)然,未來我們也會比較xgboost和lightgbm之間的對數(shù)損失。
數(shù)十款阿里云產(chǎn)品限時(shí)折扣中,趕緊點(diǎn)擊領(lǐng)劵開始云上實(shí)踐吧!
以上為譯文
本文由北郵@愛可可-愛生活?老師推薦,阿里云云棲社區(qū)組織翻譯。
文章原標(biāo)題《Benchmarking LightGBM: how fast is LightGBM vs xgboost?》,作者:Laurae,譯者:愛小乖
文章為簡譯,更為詳細(xì)的內(nèi)容,請查看原文
總結(jié)
以上是生活随笔為你收集整理的倚天遇到屠龙:LightGBM VS xgboost谁才是最强的梯度提升库?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++11 POD类型
- 下一篇: python使用snappy压缩