LightGBM

LightGBM介紹及參數調優

1、LightGBM簡介

  LightGBM是一個梯度Boosting框架,使用基於決策樹的學習算法。它可以說是分佈式的,高效的,有以下優勢:

  1)更快的訓練效率

  2)低內存使用

  3)更高的準確率

  4)支持並行化學習

  5)可以處理大規模數據

  與常見的機器學習算法對比,速度是非常快的

  

2、XGboost的缺點

  在討論LightGBM時,不可避免的會提到XGboost,關於XGboost可以參考此博文

  關於XGboost的不足之處主要有:

  1)每輪迭代時,都需要遍歷整個訓練數據多次。如果把整個訓練數據裝進內存則會限制訓練數據的大小;如果不裝進內存,反覆地讀寫訓練數據又會消耗非常大的時間。

  2)預排序方法的時間和空間的消耗都很大

3、LightGBM原理

  1)直方圖算法

  直方圖算法的基本思想是先把連續的浮點特徵值離散化成kk個整數,同時構造一個寬度爲kk的直方圖。在遍歷數據的時候,根據離散化後的值作爲索引在直方圖中累積統計量,當遍歷一次數據後,直方圖累積了需要的統計量,然後根據直方圖的離散值,遍歷尋找最優的分割點。在XGBoost中需要遍歷所有離散化的值,而在這裏只要遍歷kk個直方圖的值。

  

  使用直方圖算法有很多優點。首先,最明顯就是內存消耗的降低,直方圖算法不僅不需要額外存儲預排序的結果,而且可以只保存特徵離散化後的值。

  

  然後在計算上的代價也大幅降低,XGBoost預排序算法每遍歷一個特徵值就需要計算一次分裂的增益,而直方圖算法只需要計算kk次(kk可以認爲是常數),時間複雜度從O(#data * #feature) 優化到O(k* #features)。 
  當然,Histogram算法並不是完美的。由於特徵被離散化後,找到的並不是很精確的分割點,所以會對結果產生影響。但在不同的數據集上的結果表明,離散化的分割點對最終的精度影響並不是很大,甚至有時候會更好一點。原因是決策樹本來就是弱模型,分割點是不是精確並不是太重要;較粗的分割點也有正則化的效果,可以有效地防止過擬合;即使單棵樹的訓練誤差比精確分割的算法稍大,但在梯度提升(Gradient Boosting)的框架下沒有太大的影響。

  2)LightGBM的直方圖做差加速

  一個容易觀察到的現象:一個葉子的直方圖可以由它的父親節點的直方圖與它兄弟的直方圖做差得到。通常構造直方圖,需要遍歷該葉子上的所有數據,但直方圖做差僅需遍歷直方圖的k個桶。利用這個方法,LightGBM可以在構造一個葉子的直方圖後(父節點在上一輪就已經計算出來了),可以用非常微小的代價得到它兄弟葉子的直方圖,在速度上可以提升一倍。

   

  3)帶深度限制的Leaf-wise的葉子生長策略

  Level-wise過一次數據可以同時分裂同一層的葉子,容易進行多線程優化,也好控制模型複雜度,不容易過擬合。但實際上Level-wise是一種低效的算法,因爲它不加區分的對待同一層的葉子,帶來了很多沒必要的開銷,因爲實際上很多葉子的分裂增益較低,沒必要進行搜索和分裂。

  

  Leaf-wise則是一種更爲高效的策略,每次從當前所有葉子中,找到分裂增益最大的一個葉子,然後分裂,如此循環。因此同Level-wise相比,在分裂次數相同的情況下,Leaf-wise可以降低更多的誤差,得到更好的精度。Leaf-wise的缺點是可能會長出比較深的決策樹,產生過擬合。因此LightGBM在Leaf-wise之上增加了一個最大深度的限制,在保證高效率的同時防止過擬合。 

  

  4)直接支持類別特徵(即不需要做one-hot編碼)

  實際上大多數機器學習工具都無法直接支持類別特徵,一般需要把類別特徵,轉化到多維的one-hot編碼特徵,降低了空間和時間的效率。而類別特徵的使用是在實踐中很常用的。基於這個考慮,LightGBM優化了對類別特徵的支持,可以直接輸入類別特徵,不需要額外的one-hot編碼展開。並在決策樹算法上增加了類別特徵的決策規則。在Expo數據集上的實驗,相比0/1展開的方法,訓練速度可以加速8倍,並且精度一致。

  

  5)直接支持高效並行

  LightGBM還具有支持高效並行的優點。LightGBM原生支持並行學習,目前支持特徵並行和數據並行的兩種。 
  1)特徵並行的主要思想是在不同機器在不同的特徵集合上分別尋找最優的分割點,然後在機器間同步最優的分割點。 
  2)數據並行則是讓不同的機器先在本地構造直方圖,然後進行全局的合併,最後在合併的直方圖上面尋找最優分割點。 
  LightGBM針對這兩種並行方法都做了優化,在特徵並行算法中,通過在本地保存全部數據避免對數據切分結果的通信;在數據並行中使用分散規約 (Reduce scatter) 把直方圖合併的任務分攤到不同的機器,降低通信和計算,並利用直方圖做差,進一步減少了一半的通信量。 

  

  

 

4、LightGBM參數調優

  下面幾張表爲重要參數的含義和如何應用

  

  

  

  接下來是調參

  

  下表對應了Faster Spread,better accuracy,over-fitting三種目的時,可以調整的參數

  

 

參考文獻:

  https://zhuanlan.zhihu.com/p/25308051

  http://www.javashuo.com/article/p-whoksaxr-mo.html

  https://www.jianshu.com/p/b4ac0596e5ef