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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

lightgbm 保存模型 过大_机器学习之12—Lightgbm

發布時間:2025/3/11 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 lightgbm 保存模型 过大_机器学习之12—Lightgbm 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Lightgbm模型和GBDT以及XGboost一樣,都是基于決策樹的boosting集成模型;

Lightgbm是一個快速高效、低內存占用、高準確度、支持并行和大規模數據處理的數據科學工具。

關于GBDT和XGboost的介紹可以參考:

大餅:機器學習——提升算法(Adaboost、xgboost、GBDT)?zhuanlan.zhihu.com

Lightgbm主要特點

Histogram Algorithm(直方圖)

將連續浮點特征值離散化為k個整數,并構造bins=k的直方圖,只管來說,就是將連續值得特征劃分為k個離散值(區間),并將每個符合該離散值范圍的連續值加入到相應的bin的直方圖中,數據的離散化有著存儲方便、運算更快、魯棒性強以及模型穩定的特點(正則化);

  • 內存占用小,不需要預排序(XGboost),只保存離散化后的值,內存可以降低至1/8;
  • 計算代價小,預排序算法XGboost每遍歷一個特征值就需要計算分裂增益,Lightgbm是計算k次的離散值即可,復雜度從O(#data#feature)降低至O(#k#feature),一般data>>k;
  • bins替代原始數據,增加了正則化;
  • 特征值離散化,意味著許多細節被拋棄,影響數據間的差異性以及模型的精度;

直方圖做差加速

葉子直方圖可以由其父節點直方圖和兄弟節點直方圖做差得到,速度可以提升一倍,實際構建樹的過程中,可以先計算直方圖小的葉子節點,然后利用直方圖做差獲得直方圖大的兄弟節點,降低計算代價。

帶深度限制的Leaf-wise算法

無論是決策樹、GBDT、Adaboost還是XGBoost,其樹的生長方式都是level-wise策略,即每一個節點都分裂成兩個子節點,Xgboost因為采用了多線程優化,遍歷一次數據可以分裂同一層的節點,但是實際上很多葉子的分裂增益很低,可以不用繼續分裂下去,增加計算開銷。

leaf-wise生長策略,每次從當前所有葉子中尋找分裂增益最大的葉子進行分裂,leaf-wise可以降低誤差提高精度,并且避免很多不必要的計算開銷,但是缺點就是容易長出比較深的決策樹,產生過擬合,因此會配合最大深度限制,保持高效率的同時,減緩過擬合。

單邊梯度采樣(Goss)

Goss算法從減少樣本的角度出發排除大部分小梯度的樣本,僅用剩下的樣本計算信息增益,是一種在減少數據量和保證精度上平衡的算法。

AdaBoost中,樣本權重是數據重要性的指標。然而在GBDT中沒有原始樣本權重,不能應用權重采樣。幸運的是,我們觀察到GBDT中每個數據都有不同的梯度值,對采樣十分有用。即梯度小的樣本,訓練誤差也比較小,說明數據已經被模型學習得很好了,直接想法就是丟掉這部分梯度小的數據。然而這樣做會改變數據的分布,將會影響訓練模型的精確度,為了避免此問題,提出了GOSS算法。

  • Goss首先將分裂的特征所有取值按照梯度絕對值大小降序排序(不用保存排序結果);
  • 選取絕對值最大的 個數據;
  • 剩余的 的較小梯度數據中隨機選擇 個數據,并乘以一個常數 ,這樣模型會更關注訓練不足的樣本,而不改變原數據集的分布;
  • 最后用 個數據來計算信息增益。

互斥特征捆綁算法(EFB)

高維度的數據往往存在很大的稀疏性,數據通常都是幾千萬維的稀疏數據,對于不同維度的數據合并一起,可以使得稀疏矩陣變成一個稠密矩陣。

  • 將特征按照非零值的個數進行排序;
  • 計算不同特征的沖突比率;(兩個特征完全互斥時,比率為0)
  • 遍歷每個特征并嘗試合并特征,使沖突比率最小化;

支持類別特征

目前大部分的機器學習工具都無法有效的直接支持類別特征,一般需要將其轉化為one-hot格式,Lightgbm優化了對于類別特征的支持,可以直接輸入類別特征,不需要額外的0-1展開。

樹模型遇到one-hot編碼的類別特征時可能會遇到一些問題,比如切分方式只有是/否,很容易造成樣本切分不均衡,切分增益小;另外這種不平衡的切分方式會使得一個葉節點只有極少數樣本的情況出現,這對于決策樹基于統計信息的學習會產生很大的影響。

左圖為不平衡切分,右圖為最優切分

Lightgbm處理分類特征主要是,在1個k維的類別特征中尋找最優切分。在枚舉分割點之前,先把直方圖按每個類別的均值進行排序,然后安裝均值的結果依次枚舉最優分割點。

  • 統計該類別特征每種離散值出現次數,排序,為每一個特征值建立bin容器,對于出現次數很少的bin容器可以拋棄掉;
  • 如果bin容器數里<4,可以使用One V Other的方法,逐個掃描每個bin,找出最佳分裂點,如果bins較多的話,先進行過濾,只讓子集合較大的bin容器參加劃分閾值計算,對每個符合條件的bin容器進行公式計算:當前bin容器所有樣本一階梯度之和/該bin容器下所有樣本二階梯度之和+正則項(cat_smooth)

支持高效并行

  • 特征并行
  • 不同的機器在不同的特征集合上分別尋找最優的分割點,并在機器中同步最優分割點,這種方式對數據進行垂直劃分,每臺機器所含數據不同,使用不同的機器找到不同特征最優分割點,劃分結果需要通過通信告知每臺機器,增加額外復雜度。

    Lightgbm是在每臺機器上保存全部的訓練數據,在得到最佳劃分方案后可在本地執行劃分而減少不必要的通信。

    2. 數據并行

    Lightgbm數據并行中使用分散規約把直方圖合并的任務分攤到不同的機器,降低通信計算代價,利用直方圖做差,減少一半通信量。

    3. 投票并行

    使用投票并行的方式,只合并部分特征的直方圖從而達到降低通信量的目的,得到非常好的加速效果。

    • 本地找出Top k特征,并基于投票篩選出可能是最優分割點的特征;
    • 合并時只合并每個機器選出來的特征;

    cache命中率優化

    XGBoost在預排序之后,特征對梯度的訪問是一種隨機訪問,不同的特征訪問順序不一樣,無法優化cache,在每一層長樹的時候,需要隨機訪問一個行索引到葉子索引的數組,并且不同特征訪問的順序也不一樣,也會造成較大的cache miss。

    Lightgbm:

    • 所有特征采用相同的方式獲得梯度(XGboost不同特征通過不同索引獲得梯度),只需要對梯度進行排序可實現連續訪問,提高緩存命中率。
    • 不需要存儲行索引到葉子索引的數組,降低內存消耗,不存在Cache Miss問題。

    和XGBoost的比較

    XGBoost的缺點

    • 預排序空間消耗大,需保存數據特征值和排序結果(索引),需要訓練集兩倍的內存;
    • cache miss問題;
    • 遍歷每個分割點都需要進行分裂增益計算,消耗代價大。

    Lightgbm的優化

    • 基于histogram的決策樹算法;
    • 單邊梯度采樣(Goss),減少大量小梯度數據,節省了很多時間和空間消耗;
    • 互斥捆綁特征(EFB),降維,減少特征維度;
    • 帶深度限制的leaf-wise生長策略;
    • 支持類別特征;
    • 支持高效并行;
    • cache命中率優化。

    參考博客:

    LightGBM算法詳解(教你一文掌握LightGBM所有知識點)_GFDGFHSDS的博客-CSDN博客_lightgbm詳解?blog.csdn.netLightGBM(lgb)詳解_weixin_44023658的博客-CSDN博客_lgb介紹?blog.csdn.netLightGBM原理分析?www.jianshu.com

    參考論文:

    LightGBM: A Highly Efficient Gradient Boosting Decision Tree?papers.nips.cc

    總結

    以上是生活随笔為你收集整理的lightgbm 保存模型 过大_机器学习之12—Lightgbm的全部內容,希望文章能夠幫你解決所遇到的問題。

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