机器学习模型——LightGBM
??LightGBM(Light Gradient Boosting Machine)是一個實現GBDT算法的框架,支持高效率的并行訓練,并且具有更快的訓練速度、更低的內存消耗、更好的準確率、支持分布式可以快速處理海量數據等優點。
??GBDT在每一次迭代的時候,都需要遍歷整個訓練數據多次。如果把整個訓練數據裝進內存則會限制訓練數據的大小;如果不裝進內存,反復地讀寫訓練數據又會消耗非常大的時間。因此LightGBM提出的主要目的就是解決GBDT在海量數據時的問題,讓GBDT可以更好更快地用于工業實踐。
基本原理
一、直方圖算法
??為每個特征構造一個直方圖:將該特征的所有數據按值域劃分為k個區間,k個區間對應直方圖的k個箱子,每個區間內數據的量對應直方圖每個箱子的高度,當然每個箱子實際存儲的還有該箱子中數據的一階導數和、二階導數和等。
優點
??1.內存占用小,只需要保存特征離散化后的值
??2.計算代價更小:XGBoost的時間復雜度為O(樣本數特征數),LightGBM的時間復雜度為O(k特征數)。
缺點:
??特征被離散化后,找到的不是精確的分割點。但大量的實驗結果表明,離散化的分割點對最終的預測精度影響并不大,甚至有時候會更好一些,因為粗的分割點有正則化的效果,可以防止過擬合;
二、直方圖做差加速
??一個葉子的直方圖可以由它的父親節點的直方圖與它兄弟的直方圖做差得到,在速度上可以提升一倍。在實際構建樹的過程中,LightGBM還可以先計算直方圖小的葉子節點,然后利用直方圖做差來獲得直方圖大的葉子節點,這樣就可以用非常微小的代價得到它兄弟葉子的直方圖。
??舉個例子
??
??如上圖,假設有A、B、C三個特征,選擇第一層特征節點時,我們統計了A、B、C三個特征的直方圖,已知第一層以A的x1作為劃分點可以得到最大的增益,x1對B的劃分如紅線所示。那么在計算第二層B特征的直方圖時,只需要統計出B在≥x1側的直方圖,再與第一層的B直方圖做差,即可得到<x1側B的直方圖。
三、帶深度限制的按葉子生長(leaf-wise)策略
??大多數GBDT模型使用按層生長 (level-wise) 的決策樹生長策略,即對一層的所有葉子節點進行分裂,但實際上很多葉子的分裂增益較低,沒必要進行搜索和分裂。
??LightGBM使用帶有深度限制的按葉子生長 (leaf-wise) 策略,該策略每次從當前所有葉子中找到分裂增益最大的一個葉子進行分裂。
優點
??在分裂次數相同的情況下,Leaf-wise可以降低更多的誤差,得到更好的精度;
缺點
??可能會長出比較深的決策樹,產生過擬合。因此LightGBM在還做了一個最大深度的限制,在保證高效率的同時防止過擬合。
四、單邊梯度采樣算法(GOSS)
??我們知道,梯度小的樣本,訓練誤差也比較小,說明數據已經被模型學習得很好了,簡單的做法就是丟掉這部分梯度小的數據。然而這樣做會改變數據的分布,將會影響訓練模型的精確度,為了避免此問題,提出了GOSS算法。
流程
??對要進行分裂的特征的所有樣本按照梯度絕對值降序排序,選取絕對值最大的a%個數據。然后在剩下的較小梯度數據中隨機選擇b%個數據。接著將這b%個數據乘以一個常數(1-a)/b,然后使用這(a+b)%個數據來計算信息增益。
小梯度樣本為什么要乘一個常數?
??答案是為了還原數據分布,下面的圖可以幫助理解,圖中,a%為大梯度的樣本,則小梯度樣本有(1-a)%,然后再從(1-a)%的小梯度樣本中隨機取b%,即取到總樣本的b/(1-a)%,為了還原數據分布,所以對小梯度樣本乘上(1-a)/b。
??
??分析一下,因為(1-a)≥b,所以(1-a)/b≥1,我們取了全部大梯度樣本,只取了小梯度樣本的部分,因此乘一個大于1的數,用數值來填補數量上的舍棄。
五、互斥特征捆綁算法(EFB)
把哪些特征綁在一起?
??1.構造一個加權無向圖,頂點是特征,邊有權重,其權重與兩個特征間沖突相關;
??2.根據節點的度進行降序排序,度越大,與其它特征的沖突越大;
??3.遍歷每個特征,將它分配給現有特征包,或者新建一個特征包,使得總體沖突最小。
??算法允許兩兩特征并不完全互斥來增加特征捆綁的數量,通過設置最大沖突比率r 來平衡算法的精度和效率。
什么叫互斥特征:簡單的理解就是兩個特征經常同時取0,同時取0的次數越多,說明沖突越小,越能進行捆綁。示例如下:
怎么把特征綁為一捆?
??可以通過在特征值中加一個偏置常量來解決。比如,我們要綁定兩個特征A和B,A特征的原始取值為區間[0,10),B特征的原始取值為區間[0,20),我們可以在B特征的取值上加一個偏置常量10,將其取值范圍變為[10,30),則綁定后的特征取值范圍為 [0, 30)。
六、類別特征的處理
??one vs many方式的缺點:1.每次分裂帶來的增益通常較少,因為每次僅僅從一大推信息中區分出那么一丁點信息;2.會造成樹的深度過大,導致過擬合。
??LGBM采用了Many vs many的切分方式,可以直接輸入類別特征并實現最優切分。
1.離散特征建立直方圖的過程:
??統計該特征下每一種離散值出現的次數,并過濾掉出現次數較少的特征值, 然后為每一個特征值,建立一個bin容器。
2.計算分裂閾值的過程:
- 如果bin容器的數量小于4,直接使用one vs other方式, 逐個掃描每一個bin容器,找出最佳分裂點;
- 對于bin容器較多的情況, 先進行過濾,只讓子集合較大的bin容器參加劃分閾值計算,然后對符合條件的bin容器計算劃分的信息增益。 但是有一點,不會搜索所有的bin容器,而是設定了一個搜索bin容器數量的上限值,默認值是32,可通過參數max_num_cat設置。
?? LightGBM中對離散特征實行的是many vs many 策略,這32個bin中最優劃分的閾值的左邊或者右邊所有的bin容器就是一個many集合,而其他的bin容器就是另一個many集合。
七、工程優化
??1.直接支持類別特征;
??2.支持高效并行:
????特征并行:垂直并行,各特征的最優劃分點可以分攤到多臺機器;
????數據并行:水平并行,數據可以水平劃分到多臺機器計算;
????投票并行:本地找出 Top K 特征,并基于投票篩選出可能是最優分割點的特征;合并時只合并每個機器選出來的特征。
??3.緩存命中率優化:
????所有的特征都采用相同的方式獲得梯度,只需要對梯度進行排序即可實現連續訪問,大大提高了緩存命中率;其次,因為不需要存儲行索引到葉子索引的數組,降低了存儲消耗,而且也不存在 Cache Miss的問題。
八、優缺點
優點
??1.速度更快
??LightGBM 采用了直方圖算法將遍歷樣本轉變為遍歷直方圖,極大的降低了時間復雜度;
??LightGBM 在訓練過程中采用單邊梯度算法過濾掉梯度小的樣本,減少了大量的計算;
??LightGBM 采用了基于 Leaf-wise 算法的增長策略構建樹,減少了很多不必要的計算量;
??LightGBM 采用優化后的特征并行、數據并行方法加速計算,當數據量非常大的時候還可以采用投票并行的策略;
??LightGBM 對緩存也進行了優化,增加了緩存命中率;
??2.內存更小
??使用直方圖算法將特征值轉變為 bin 值,且不需要記錄特征到樣本的索引,極大的減少了內存消耗;
在訓練過程中采用互斥特征捆綁算法減少了特征數量,降低了內存消耗。
缺點
??1.可能會長出比較深的決策樹,產生過擬合。因此LightGBM在Leaf-wise之上增加了一個最大深度限制,在保證高效率的同時防止過擬合;
??2.由于LightGBM是基于Boosting的算法,所以會對噪點較為敏感;
??3.在尋找最優解時,依據的是最優切分變量,沒有將最優解是全部特征的綜合這一理念考慮進去。
總結
以上是生活随笔為你收集整理的机器学习模型——LightGBM的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 22、p2p信贷术语
- 下一篇: 大数据导论三——大数据技术