LightGBM的算法介紹


LightGBM算法的特別之處

  • LightGBM算法在模型的訓練速度和內存方面都有相應的優化。

    基於樹模型的boosting算法,很多算法比如(xgboost 的默認設置)都是用預排序(pre-sorting)算法進行特征的選擇和分裂。

    1. 首先,對所有特征按數值進行預排序。
    2. 其次,在每次的樣本分割時,用O(# data)的代價找到每個特征的最優分割點。
    3. 最后,找到最后的特征以及分割點,將數據分裂成左右兩個子節點。 
      優缺點: 
      這種pre-sorting算法能夠准確找到分裂點,但是在空間和時間上有很大的開銷。 
      i. 由於需要對特征進行預排序並且需要保存排序后的索引值(為了后續快速的計算分裂點),因此內存需要訓練數據的兩倍。 
      ii. 在遍歷每一個分割點的時候,都需要進行分裂增益的計算,消耗的代價大。

    LightGBM采用Histogram算法,其思想是將連續的浮點特征離散成k個離散值,並構造寬度為k的Histogram。然后遍歷訓練數據,統計每個離散值在直方圖中的累計統計量。在進行特征選擇時,只需要根據直方圖的離散值,遍歷尋找最優的分割點。

    Histogram 算法的優缺點:

    1. Histogram算法並不是完美的。由於特征被離散化后,找到的並不是很精確的分割點,所以會對結果產生影響。但在實際的數據集上表明,離散化的分裂點對最終的精度影響並不大,甚至會好一些。原因在於decision tree本身就是一個弱學習器,采用Histogram算法會起到正則化的效果,有效地防止模型的過擬合。
    2. 時間上的開銷由原來的O(#data * #features)降到O(k * #features)。由於離散化,#bin遠小於#data,因此時間上有很大的提升。
    3. Histogram算法還可以進一步加速。一個葉子節點的Histogram可以直接由父節點的Histogram和兄弟節點的Histogram做差得到。一般情況下,構造Histogram需要遍歷該葉子上的所有數據,通過該方法,只需要遍歷Histogram的k個捅。速度提升了一倍。 
      這里寫圖片描述

    LightGBM的leaf-wise的生長策略

    它摒棄了現在大部分GBDT使用的按層生長(level-wise)的決策樹生長策略,使用帶有深度限制的按葉子生長(leaf-wise)的策略。level-wise過一次數據可以同時分裂同一層的葉子,容易進行多線程優化,也好控制模型復雜度,不容易過擬合。但實際上level-wise是一種低效的算法,因為它不加區分的對待同一層的葉子,帶來了很多沒必要的開銷,因為實際上很多葉子的分裂增益較低,沒必要進行搜索和分裂。 
    這里寫圖片描述

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

    LightGBM支持類別特征

    實際上大多數機器學習工具都無法直接支持類別特征,一般需要把類別特征,轉化one-hotting特征,降低了空間和時間的效率。而類別特征的使用是在實踐中很常用的。基於這個考慮,LightGBM優化了對類別特征的支持,可以直接輸入類別特征,不需要額外的0/1展開。並在決策樹算法上增加了類別特征的決策規則。

以上是LightGBM算法的特別之處,除此之外LightGBM還具有高校並行的特點。下一篇文章將介紹LightGBM的特征並行(Feature Parallel)和數據並行(Data Parallel),以及相較於傳統的並行方法的優點。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM