日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LightGBM---转载自https://www.biaodianfu.com/lightgbm.html

發(fā)布時間:2023/12/14 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LightGBM---转载自https://www.biaodianfu.com/lightgbm.html 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉載自:https://www.biaodianfu.com/lightgbm.html
好文章,自學用,防止丟失,轉載
傳送門

LigthGBM是boosting集合模型中的新進成員,由微軟提供,它和XGBoost一樣是對GBDT的高效實現(xiàn),原理上它和GBDT及XGBoost類似,都采用損失函數(shù)的負梯度作為當前決策樹的殘差近似值,去擬合新的決策樹。

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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。