天天看點

倚天遇到屠龍:LightGBM VS xgboost誰才是最強的梯度提升庫?

作者介紹:laurae ,資料科學愛好者

blog:https://medium.com/@laurae2

背景知識:

xgboost是一款經過優化的分布式梯度提升(gradient boosting)庫,具有高效,靈活和高可移植性的特點。基于梯度提升架構,xgboost實作了并行方式的決策樹提升(tree boosting),進而能夠快速準确地解決各種資料科學問題。

lightgbm(light gradient boosting machine)同樣是一款基于決策樹算法的分布式梯度提升架構。

這篇部落格是關于lightgbm 和xgboost 的對比。實驗使用了定制的博世資料集,結果顯示,在速度上xgboost 比lightgbm在慢了10倍,而我們還需要做一些其它方面的比較。

首先讓我們來看一下這個圖表,所有人都應該打起精神!!!

倚天遇到屠龍:LightGBM VS xgboost誰才是最強的梯度提升庫?

從圖上我們可以看到,平均來說,lightgbm 比xgboost 快11到15倍。

我們也注意到,随着線程數的增加,比率變小了。這也很容易解釋,因為你不可能讓線程的使用率是100%,線程的切入切出以及線程有時要等待,這都需要耗費很多時間。

我們來看一下前12個線程。

倚天遇到屠龍:LightGBM VS xgboost誰才是最強的梯度提升庫?
倚天遇到屠龍:LightGBM VS xgboost誰才是最強的梯度提升庫?

從表中,我們可以看到,當線程數超過6的時候xgboost的性能得到了很大的提升(當線程數是12的時候,消耗時長從577.9降低到414.3秒,大約提高了28.3%)。

對于lightgbm來說是否也是這樣呢?時間從45.1降低到了33.6秒,性能提高大約25.5%。

小結:使用所有邏輯核心進行線程化,這能極大地提高性能。 如果你希望你的機器學習訓練速度提高25%(顯然,根據cpu的不同,情況也不完全一樣),你現在知道該做什麼:使用邏輯核心,而不是實體核心來建立線程。

那麼13-24個線程又會怎麼樣呢?我們增加12個線程作為參照。

倚天遇到屠龍:LightGBM VS xgboost誰才是最強的梯度提升庫?
倚天遇到屠龍:LightGBM VS xgboost誰才是最強的梯度提升庫?

我們可以注意到:

對于xgboost來說并沒有提升,數值的變化基本可以看成是誤差

對于lightgbm來說反而耗時更長,從33.6秒提高到38秒以上

是以我們可以簡單的下一個結論:不要過度配置設定邏輯核心,這不是一個好的做法。保持使用邏輯核心建立一定量的線程,并且不要超過該數。

倚天遇到屠龍:LightGBM VS xgboost誰才是最強的梯度提升庫?

在建立矩陣後使用gc方法兩次來快速檢視ram使用情況,具體情況如下:

倚天遇到屠龍:LightGBM VS xgboost誰才是最強的梯度提升庫?

初始資料(密集,未使用):約8,769 mb(27.9%vs原始版本)

原始資料(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更高的記憶體占用。

我們使用12個線程來檢查ram效率,在50次boosting疊代結束時,在boosting之前使用gc,boosting之後不使用gc,效果如下:

xgboost:約 1684 mb

lightgbm: 1425 mb(xgboost記憶體使用量的84.6%)

我們可以注意到,lightgbm在訓練期間的ram使用率較低,但是記憶體中資料的ram使用量增加。 是以r語言的lightgbm包有改進的潛能,以具有更有效的方式來存儲資料。

當xgboost的快速直方圖方法啟動并在r語言中可用時,我們會使用新的名額。雖然它目前正在運作,但在r語言中不可用。這樣一來xgboost和lightgbm孰優孰劣到時就會揭曉。

當然,未來我們也會比較xgboost和lightgbm之間的對數損失。

<a href="https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?usercode=lwju78qa&amp;utm_source=lwju78qa">數十款阿裡雲産品限時折扣中,趕緊點選領劵開始雲上實踐吧!</a>

以上為譯文

文章原标題《<b>benchmarking lightgbm: how fast is lightgbm vs xgboost?</b>》,作者:laurae,譯者:愛小乖