LightGBM---转载自https://www.biaodianfu.com/lightgbm.html
轉載自:https://www.biaodianfu.com/lightgbm.html
好文章,自學用,防止丟失,轉載
傳送門
LightGBM在很多方面會比XGBoost表現(xiàn)的更為優(yōu)秀。它有以下優(yōu)勢:
- 更快的訓練效率
- 低內存使用
- 更高的準確率
- 支持并行化學習
- 可處理大規(guī)模數(shù)據(jù)
- 支持直接使用category特征
從下圖實驗數(shù)據(jù)可以看出, LightGBM比XGBoost快將近10倍,內存占用率大約為XGBoost的1/6,并且準確率也有提升。
看完這些驚人的實驗結果以后,對下面兩個問題產(chǎn)生了疑惑:XGBoost已經(jīng)十分完美了,為什么還要追求速度更快、內存使用更小的模型?對GBDT算法進行改進和提升的技術細節(jié)是什么?
提出LightGBM的動機
常用的機器學習算法,例如神經(jīng)網(wǎng)絡等算法,都可以以mini-batch的方式訓練,訓練數(shù)據(jù)的大小不會受到內存限制。而GBDT在每一次迭代的時候,都需要遍歷整個訓練數(shù)據(jù)多次。如果把整個訓練數(shù)據(jù)裝進內存則會限制訓練數(shù)據(jù)的大小;如果不裝進內存,反復地讀寫訓練數(shù)據(jù)又會消耗非常大的時間。尤其面對工業(yè)級海量的數(shù)據(jù),普通的GBDT算法是不能滿足其需求的。
LightGBM提出的主要原因就是為了解決GBDT在海量數(shù)據(jù)遇到的問題,讓GBDT可以更好更快地用于工業(yè)實踐。
XGBoost的優(yōu)缺點
精確貪心算法
每輪迭代時,都需要遍歷整個訓練數(shù)據(jù)多次。如果把整個訓練數(shù)據(jù)裝進內存則會限制訓練數(shù)據(jù)的大小;如果不裝進內存,反復地讀寫訓練數(shù)據(jù)又會消耗非常大的時間。
優(yōu)點:
- 可以找到精確的劃分條件
缺點:
- 計算量巨大
- 內存占用巨大
- 易產(chǎn)生過擬合
Level-wise迭代方式
預排序方法(pre-sorted):首先,空間消耗大。這樣的算法需要保存數(shù)據(jù)的特征值,還保存了特征排序的結果(例如排序后的索引,為了后續(xù)快速的計算分割點),這里需要消耗訓練數(shù)據(jù)兩倍的內存。其次時間上也有較大的開銷,在遍歷每一個分割點的時候,都需要進行分裂增益的計算,消耗的代價大。
優(yōu)點:
- 可以使用多線程
- 可以加速精確貪心算法
缺點:
- 效率低下,可能產(chǎn)生不必要的葉結點
對cache優(yōu)化不友好
在預排序后,特征對梯度的訪問是一種隨機訪問,并且不同的特征訪問的順序不一樣,無法對cache進行優(yōu)化。同時,在每一層長樹的時候,需要隨機訪問一個行索引到葉子索引的數(shù)組,并且不同特征訪問的順序也不一樣,也會造成較大的cache miss。
LightGBM在哪些地方進行了優(yōu)化?
以上與其說是XGBoost的不足,倒不如說是LightGBM作者們構建新算法時著重瞄準的點。解決了什么問題,那么原來模型沒解決就成了原模型的缺點。
概括來說,lightGBM主要有以下特點:
- 基于Histogram的決策樹算法
- 帶深度限制的Leaf-wise的葉子生長策略
- 直方圖做差加速
- 直接支持類別特征(Categorical Feature)
- Cache命中率優(yōu)化
- 基于直方圖的稀疏特征優(yōu)化
- 多線程優(yōu)化
決策樹算法
XGBoost使用的是pre-sorted算法,能夠更精確的找到數(shù)據(jù)分隔點。
- 首先,對所有特征按數(shù)值進行預排序。
- 其次,在每次的樣本分割時,用O(# data)的代價找到每個特征的最優(yōu)分割點。
- 最后,找到最后的特征以及分割點,將數(shù)據(jù)分裂成左右兩個子節(jié)點。
這種pre-sorting算法能夠準確找到分裂點,但是在空間和時間上有很大的開銷。
- 由于需要對特征進行預排序并且需要保存排序后的索引值(為了后續(xù)快速的計算分裂點),因此內存需要訓練數(shù)據(jù)的兩倍。
- 在遍歷每一個分割點的時候,都需要進行分裂增益的計算,消耗的代價大。
LightGBM使用的是histogram算法,占用的內存更低,數(shù)據(jù)分隔的復雜度更低。其思想是將連續(xù)的浮點特征離散成k個離散值,并構造寬度為k的Histogram。然后遍歷訓練數(shù)據(jù),統(tǒng)計每個離散值在直方圖中的累計統(tǒng)計量。在進行特征選擇時,只需要根據(jù)直方圖的離散值,遍歷尋找最優(yōu)的分割點。
使用直方圖算法有很多優(yōu)點。首先最明顯就是內存消耗的降低,直方圖算法不僅不需要額外存儲預排序的結果,而且可以只保存特征離散化后的值,而這個值一般用8位整型存儲就足夠了,內存消耗可以降低為原來的1/8。
然后在計算上的代價也大幅降低,預排序算法每遍歷一個特征值就需要計算一次分裂的增益,而直方圖算法只需要計算k次(k可以認為是常數(shù)),時間復雜度從O(#data*#feature)優(yōu)化到O(k*#features)。
Histogram algorithm
Histogram algorithm應該翻譯為直方圖算法,直方圖算法的思想也很簡單,首先將連續(xù)的浮點數(shù)據(jù)轉換為bin數(shù)據(jù),具體過程是首先確定對于每一個特征需要多少的桶bin,然后均分,將屬于該桶的樣本數(shù)據(jù)更新為bin的值,最后用直方圖表示。(看起來很高大上,其實就是直方圖統(tǒng)計,最后我們將大規(guī)模的數(shù)據(jù)放在了直方圖中)
直方圖算法有幾個需要注意的地方:
- 使用bin替代原始數(shù)據(jù)相當于增加了正則化;
- 使用bin意味著很多數(shù)據(jù)的細節(jié)特征被放棄了,相似的數(shù)據(jù)可能被劃分到相同的桶中,這樣的數(shù)據(jù)之間的差異就消失了;
- bin數(shù)量選擇決定了正則化的程度,bin越少懲罰越嚴重,欠擬合風險越高。
直方圖算法需要注意的地方:
- 構建直方圖時不需要對數(shù)據(jù)進行排序(比XGBoost快),因為預先設定了bin的范圍;
- 直方圖除了保存劃分閾值和當前bin內樣本數(shù)以外還保存了當前bin內所有樣本的一階梯度和(一階梯度和的平方的均值等價于均方損失);
- 閾值的選取是按照直方圖從小到大遍歷,使用了上面的一階梯度和,目的是得到劃分之后△loss最大的特征及閾值。
Histogram 算法的優(yōu)缺點:
- Histogram算法并不是完美的。由于特征被離散化后,找到的并不是很精確的分割點,所以會對結果產(chǎn)生影響。但在實際的數(shù)據(jù)集上表明,離散化的分裂點對最終的精度影響并不大,甚至會好一些。原因在于decision tree本身就是一個弱學習器,采用Histogram算法會起到正則化的效果,有效地防止模型的過擬合。
- 時間上的開銷由原來的O(#data * #features)降到O(k * #features)。由于離散化,#bin遠小于#data,因此時間上有很大的提升。
Histogram算法還可以進一步加速。一個葉子節(jié)點的Histogram可以直接由父節(jié)點的Histogram和兄弟節(jié)點的Histogram做差得到。一般情況下,構造Histogram需要遍歷該葉子上的所有數(shù)據(jù),通過該方法,只需要遍歷Histogram的k個捅。速度提升了一倍。
決策樹生長策略
在Histogram算法之上,LightGBM進行進一步的優(yōu)化。首先它拋棄了大多數(shù)GBDT工具使用的按層生長 (level-wise)的決策樹生長策略,而使用了帶有深度限制的按葉子生長 (leaf-wise)算法。
XGBoost采用的是按層生長level(depth)-wise生長策略,能夠同時分裂同一層的葉子,從而進行多線程優(yōu)化,不容易過擬合;但不加區(qū)分的對待同一層的葉子,帶來了很多沒必要的開銷。因為實際上很多葉子的分裂增益較低,沒必要進行搜索和分裂。
LightGBM采用leaf-wise生長策略,每次從當前所有葉子中找到分裂增益最大(一般也是數(shù)據(jù)量最大)的一個葉子,然后分裂,如此循環(huán)。因此同Level-wise相比,在分裂次數(shù)相同的情況下,Leaf-wise可以降低更多的誤差,得到更好的精度。Leaf-wise的缺點是可能會長出比較深的決策樹,產(chǎn)生過擬合。因此LightGBM在Leaf-wise之上增加了一個最大深度的限制,在保證高效率的同時防止過擬合。
直方圖差加速
LightGBM另一個優(yōu)化是Histogram(直方圖)做差加速。一個容易觀察到的現(xiàn)象:一個葉子的直方圖可以由它的父親節(jié)點的直方圖與它兄弟的直方圖做差得到。通常構造直方圖,需要遍歷該葉子上的所有數(shù)據(jù),但直方圖做差僅需遍歷直方圖的k個桶。利用這個方法,LightGBM可以在構造一個葉子的直方圖后,可以用非常微小的代價得到它兄弟葉子的直方圖,在速度上可以提升一倍。
總結
以上是生活随笔為你收集整理的LightGBM---转载自https://www.biaodianfu.com/lightgbm.html的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: P2P金融项目简介
- 下一篇: win7原版镜像_AMD平台B450主板