LGBM
Light GBM is a gradient boosting framework that uses tree based learning algorithm。
傳統的GBDT算法存在的問題:
1、如何減少訓練數據
常用的減少訓練數據量的方式是down sample。例如在[5]中,權重小於閾值的數據會被過濾掉,SGB在每一輪迭代中用隨機的子集訓練弱學習器;在[6]中,采樣率會在訓練過程中動態調整。但是,所有這些工作除了SGB外都是基於AdaBoost的,並且由於GBDT沒有數據實例的權重,所以不能直接運用到GBDT上。雖然SGB可以應用到GBDT,但是它這種做法對acc影響太大了。
2、如何減少特征
類似的,為了減少特征的數量,需要過濾若特征[22, 23, 7, 24]。這通常用PCA和projection pursuit來做。可是,這些方法高度依賴一個假設,那就是特征包含相當多的冗余的信息。而這個假設在實踐中通常不成立(因為通常特征都被設計為具有獨特作用的,移除了哪個都可能對訓練的acc有影響)
3、關於稀疏的數據
現實應用中的大規模數據通常是相當稀疏的。使用pre-sorted algorithm的GBDT可以通過忽略值為0的特征來降低訓練的開銷。而使用histogram-based algorithm的GBDT沒有針對稀疏數據的優化方案,因為histogram-based algorithm無論特征值是否為0,都需要檢索特征的bin值,所以它能夠有效地利用這種稀疏特性。
LightGBM 提出的主要原因就是為了解決 GBDT 在海量數據遇到的問題,讓 GBDT 可以更好更快地用於工業實踐。
LGBM的技術細節
Histogram 算法
直方圖算法的基本思想是先把連續的浮點特征值離散化成k個整數,同時構造一個寬度為k的直方圖。在遍歷數據的時候,根據離散化后的值作為索引在直方圖中累積統計量,當遍歷一次數據后,直方圖累積了需要的統計量,然后根據直方圖的離散值,遍歷尋找最優的分割點。

使用直方圖算法有很多優點。首先,最明顯就是內存消耗的降低,直方圖算法不僅不需要額外存儲預排序的結果,而且可以只保存特征離散化后的值,而這個值一般用 8 位整型存儲就足夠了,內存消耗可以降低為原來的1/8。

然后在計算上的代價也大幅降低,預排序算法每遍歷一個特征值就需要計算一次分裂的增益,而直方圖算法只需要計算k次(k可以認為是常數),時間復雜度從O(#data*#feature)優化到O(k*#features)。
當然,Histogram 算法並不是完美的。由於特征被離散化后,找到的並不是很精確的分割點,所以會對結果產生影響。但在不同的數據集上的結果表明,離散化的分割點對最終的精度影響並不是很大,甚至有時候會更好一點。原因是決策樹本來就是弱模型,分割點是不是精確並不是太重要;較粗的分割點也有正則化的效果,可以有效地防止過擬合;即使單棵樹的訓練誤差比精確分割的算法稍大,但在梯度提升(Gradient Boosting)的框架下沒有太大的影響。
帶深度限制的 Leaf-wise 的葉子生長策略
在 Histogram 算法之上,LightGBM 進行進一步的優化。首先它拋棄了大多數 GBDT 工具使用的按層生長 (level-wise) 的決策樹生長策略,而使用了帶有深度限制的按葉子生長 (leaf-wise) 算法。Level-wise 過一次數據可以同時分裂同一層的葉子,容易進行多線程優化,也好控制模型復雜度,不容易過擬合。但實際上 Level-wise 是一種低效的算法,因為它不加區分的對待同一層的葉子,帶來了很多沒必要的開銷,因為實際上很多葉子的分裂增益較低,沒必要進行搜索和分裂。

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

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

直接支持類別特征
實際上大多數機器學習工具都無法直接支持類別特征,一般需要把類別特征,轉化到多維的0/1 特征,降低了空間和時間的效率。而類別特征的使用是在實踐中很常用的。基於這個考慮,LightGBM 優化了對類別特征的支持,可以直接輸入類別特征,不需要額外的0/1 展開。並在決策樹算法上增加了類別特征的決策規則。在 Expo 數據集上的實驗,相比0/1 展開的方法,訓練速度可以加速 8 倍,並且精度一致。據我們所知,LightGBM 是第一個直接支持類別特征的 GBDT 工具。
優點
-
更快的訓練速度和更高的效率:LightGBM使用基於直方圖的算法。例如,它將連續的特征值分桶(buckets)裝進離散的箱子(bins),這是的訓練過程中變得更快。
-
更低的內存占用:使用離散的箱子(bins)保存並替換連續值導致更少的內存占用。
-
更高的准確率(相比於其他任何提升算法) :它通過leaf-wise分裂方法產生比level-wise分裂方法更復雜的樹,這就是實現更高准確率的主要因素。然而,它有時候或導致過擬合,但是我們可以通過設置 **max-depth** 參數來防止過擬合的發生。
-
大數據處理能力:相比於XGBoost,由於它在訓練時間上的縮減,它同樣能夠具有處理大數據的能力。
-
支持並行學習
缺點
直方圖較為粗糙,會損失一定精度,但是在gbm的框架下,基學習器的精度損失可以通過引入更多的tree來彌補
參數調優
下面幾張表為重要參數的含義和如何應用
接下來是調參

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