監督學習集成模型——LightGBM

LightGBM的全稱爲Light Gradient Boosting Machine,即輕量的梯度提升機,由微軟在其論文“LightGBM: A Highly Efficient Gradient Boosting Decision Tree”中提出,作爲與XGBoost並駕齊驅的SOTA Boosting算法,LightGBM在各種頂級解決方案中同樣屢見不鮮。LightGBM本質上仍屬於GBDT算法,一種針對XGBoost缺陷的改進版本,使得GBDT算法系統更輕便、更高效,能夠做到又快又準。
image

一、XGBoost可改進的點

XGBoost通過預排序(對所有特徵都按照特徵的數值進行排序)的算法來尋找特徵的最佳分裂點,雖然預排序算法能夠準確找出特徵的分裂點,但該方法佔用空間太大,在數據量和特徵量都比較多的情況下,會嚴重影響算法性能。

XGBoost尋找最佳分裂點的算法複雜度可以估計爲:

複雜度=特徵數量×特徵分裂點的數量×樣本數量

既然XGBoost的複雜度是由特徵數量、特徵分裂點的數量和樣本數量所決定的,那麼LightGBM的優化自然可以從這三個方向來考慮。

二、LightGBM原理

跟XGBoost一樣,LightGBM也是GBDT算法框架的一種工程實現,不過更快速、更高效。下面分別從直方圖算法、單邊梯度抽樣、互斥特徵捆綁算法以及leaf-wise生長策略等方向來解釋LightGBM。

2.1 直方圖算法

爲了減少特徵分裂點數量和更加高效地尋找最佳特徵分裂點,LightGBM區別於XGBoost的預排序算法,採用直方圖算法尋找最佳特徵分裂點。主要思路是將連續的浮點特徵值離散化爲k個整數並構造一個寬度爲k的直方圖。對某個特徵數據進行遍歷的時候,將離散化後的值用爲索引並作爲直方圖的累積統計量。遍歷完一次後,直方圖便可累積對應的統計量,然後根據該直方圖尋找最佳分裂點。

image

直方圖算法本質上是一種數據離散化和分箱(分桶)操作,雖然談不上特別新穎的優化設計,但確實速度快性能優,計算代價和內存佔用都大大減少。

直方圖的另一個好處在於差加速。一個葉子結點的直方圖可由其父結點的直方圖與其兄弟結點的直方圖作差得到,這也可以加速特徵結點分裂。

image

直方圖算法對應的是特徵分裂點的優化。

2.2 單邊梯度抽樣

單邊梯度抽樣(gradient-based one-side sampling,GOSS)算法是LightGBM從減少樣本的角度進行優化而設計的算法,是LightGBM的核心原理之一。

單邊梯度抽樣算法的主要思路是從減少樣本的角度出發,將訓練過程中大部分權重(GBDT算法體系中使用樣本梯度來代替樣本權重)較小的樣本剔除,僅對剩餘樣本數據計算信息增益,它是一種在減少數據量和保證精度上平衡的算法。

GOSS的基本做法是先將需要進行分裂的特徵按絕對值大小降序排序,取絕對值最大的前a%個數據,假設樣本大小爲n,在剩下的(1−a)%個數據中隨機選擇b%個數據,將這b%個數據乘以一個常數(1−a)/b,這種做法會使得算法更加關注訓練不夠充分的樣本,並且原始的數據分佈不會有太大改變。最後使用a+b個數據來計算該特徵的信息增益。

GOSS算法主要從減少樣本的角度對GBDT進行優化。丟棄梯度較小的樣本並且在不損失太多精度的情況下提升模型的訓練速度,這是LightGBM速度較快的原因之一。

GOSS對應的是樣本量的算法優化。

2.3 互斥特徵捆綁算法

高維度的數據往往是稀疏的,這種稀疏性啓發我們設計一種無損的方法來減少特徵的維度。

互斥特徵捆綁(exclusive feature bundling,EFB)算法通過將兩個互斥的特徵捆綁爲一個特徵,在不丟失特徵信息的前提下,減少特徵數量(降維),從而加速模型訓練。

所謂特徵互斥,即兩個特徵不會同時爲非零值,這一點跟分類特徵的one-hot表達有點類似。互斥特徵捆綁算法的關鍵問題有兩個:一個是如何判斷將哪些特徵進行綁定,另一個就是如何將特徵進行綁定,即綁定後的特徵如何取值。

針對第一個問題,EFB算法將其轉化爲圖着色問題(graph coloring problem)來求解。其基本思路是將所有特徵看作圖的各個頂點,用一條邊連接不相互獨立的兩個特徵,邊的權重則表示兩個相連接的特徵的衝突比率,需要綁定在一起的特徵就是圖着色問題中要塗上同一種顏色的點(特徵)。

第二個問題是要確定綁定後的特徵如何進行取值,其關鍵在於能夠將原始特徵從合併後的特徵中分離,即綁定到一個特徵後,仍然可以從這個綁定的bundle裏面識別出原始特徵。EFB算法針對該問題嘗試從直方圖的角度來處理,具體做法是將不同特徵值分到綁定的bundle中不同的直方圖“箱子”中,通過在特徵取值中加一個偏置常量來進行處理。

互斥特徵捆綁算法針對的是特徵的優化。

2.4 leaf-wise生長策略

LightGBM提出了區別於XGBoost的按層生長的葉子結點生長方法,即帶有深度限制的按葉子結點(leaf-wise)生長的決策樹生長方法

XGBoost採用按層生長的level-wise算法,好處是可以多線程優化,也方便控制模型複雜度,且不易過擬合,缺點是不加區分地對待同一層所有葉子結點,大部分結點分裂和增益計算不是必需的,產生了多餘的計算開銷。

LightGBM提出了按葉子結點生長的leaf-wise算法。

leaf-wise算法:每次從當前所有葉子中找到分裂增益最大(一般也是數據量最大)的一個葉子,然後分裂,如此循環。

leaf-wise精度更高且更高效,能夠節約不必要的計算開銷。

但可能會長出比較深的決策樹,產生擬合。爲防止某一結點過分生長,leaf-wise加上一個深度限制機制,能夠在保證精度的同時一定程度上防止過擬合。

image

除了以上四點改進算法外,LightGBM在工程實現上也有一些改進和優化,比如可以直接支持類別特徵(不需要再對類別特徵進行one-hot處理)、高效並行和cache(緩存)命中率優化等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章