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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

LightGBM详细

發布時間:2023/12/14 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LightGBM详细 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

LightGBM

XGB的優缺點:

LightGBM原理

1.1 GBDT和 LightGBM對比

1.2 LightGBM 的動機

1.3 Xgboost 原理

1.4 LightGBM 優化

LightGBM算法原理:

直方圖算法(Histgram)

帶深度限制的Leaf-wise算法

單邊梯度采樣算法

互斥特征捆綁算法

LightGBM的優缺點:

速度:

內存:


LightGBM

GBDT是一個長久不衰的模型,他的思想是什么?

它的思想就是將多個弱分類器迭代訓練得到最優的模型,訓練效果好,不易過擬合等等的有點,那么XGB就是典型的一個GBDT的實現。

首先回顧一下XGB,它的核心思想就是說,是屬于GBDT的一個延申,因此它的模型也是加法模型,由多個弱分類器相加的結果,那么在構成弱分類器的時候,首先需要對特征值進行預排序,然后便利所有的切分點,然后計算每個切分點的一個增益,最后找到最優的分裂點進行數據分裂成左右子樹。

XGB的優缺點:

優點:

能夠最精確的找到切分點,因為把所有的樣本看一遍,都計算了一遍,肯定能找到最優的點。

缺點:

時間消耗比較大

  • 算法中需要保存特征和特征值,還需要保存排序的結果。
  • 在遍歷每個劃分點的時候,都需要進行增益的計算,因此消耗會比較大。
  • LightGBM原理


    1.1 GBDT和 LightGBM對比


    ? GBDT (Gradient Boosting Decision Tree) 是機器學習中一個長盛不衰的模型,其主要思想是利用弱分類器(決策樹)迭代訓練以得到最優模型,該模型具有訓練效果好、不易過擬合等優點。GBDT 在工業界應用廣泛,通常被用于點擊率預測,搜索排序等任務。GBDT 也是各種數據挖掘競賽的致命武器,據統計 Kaggle 上的比賽有一半以上的冠軍方案都是基于 GBDT。

    ? LightGBM (Light Gradient Boosting Machine)是一個實現 GBDT 算法的框架,支持高效率的并行訓練,并且具有以下優點:

    更快的訓練速度
    更低的內存消耗
    更好的準確率
    分布式支持,可以快速處理海量數據
    ? 如下圖,在 Higgs 數據集上 LightGBM 比 XGBoost 快將近 10 倍,內存占用率大約為 XGBoost 的1/6,并且準確率也有提升。

    1.2 LightGBM 的動機


    ? 常用的機器學習算法,例如神經網絡等算法,都可以以 mini-batch 的方式訓練,訓練數據的大小不會受到內存限制。

    ? 而 GBDT 在每一次迭代的時候,都需要遍歷整個訓練數據多次。如果把整個訓練數據裝進內存則會限制訓練數據的大小;如果不裝進內存,反復地讀寫訓練數據又會消耗非常大的時間。尤其面對工業級海量的數據,普通的 GBDT 算法是不能滿足其需求的。

    LightGBM 提出的主要原因就是為了解決 GBDT 在海量數據遇到的問題,讓 GBDT 可以更好更快地用于工業實踐。


    1.3 Xgboost 原理


    ? 目前已有的 GBDT 工具基本都是基于預排序的方法(pre-sorted)的決策樹算法(如 xgboost)。這種構建決策樹的算法基本思想是:   

    首先,對所有特征都按照特征的數值進行預排序。   

    其次,在遍歷分割點的時候用O(#data)的代價找到一個特征上的最好分割點。   

    最后,找到一個特征的分割點后,將數據分裂成左右子節點。   

    這樣的預排序算法的優點是:能精確地找到分割點。   

    缺點也很明顯:   

    首先,空間消耗大。這樣的算法需要保存數據的特征值,還保存了特征排序的結果(例如排序后的索引,為了后續快速的計算分割點),這里需要消耗訓練數據兩倍的內存。   

    其次,時間上也有較大的開銷,在遍歷每一個分割點的時候,都需要進行分裂增益的計算,消耗的代價大。

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

    1.4 LightGBM 優化


    LightGBM 優化部分包含以下:

    基于 Histogram 的決策樹算法
    帶深度限制的 Leaf-wise 的葉子生長策略
    直方圖做差加速
    直接支持類別特征(Categorical Feature)
    Cache 命中率優化
    基于直方圖的稀疏特征優化
    多線程優化。
    ? 下面主要介紹 Histogram 算法、帶深度限制的 Leaf-wise 的葉子生長策略和直方圖做差加速。
    ?

    其實LightGBM也是一個實現GBDT算法的框架,

    那么LightGBM的特點?

    它支持高效的并行訓練,有著更快的訓練速度,更低的內存消耗,更好的準確率,支持分布式,可以快速的處理海量的數據。

    LightGBM算法原理:

  • 直方圖算法(Histgram)

  • 思想:把連續的特征值離散化成K個整數,比如說0~1我們叫做1,1~2我們叫做3,。。。。。。等等,這樣然后在對特征值里邊的數據進行一個統計,這樣是不是就得到了一個直方圖,然后我們用直方圖所對應的值來進行增益的分裂,將大規模的數據更新為箱子的值。

    那么這樣做的目的是什么?

  • 我們知道離散值的特點有:儲存方便,運算更快,魯棒性更強,模型更加的穩定
  • 對于直方圖來說最直接優點是什么?

    內存占用小,因為不需要保存原來的特征了,只需要保存直方圖統計后的值,這個值一般情況下用8位的整型去儲存就夠了,但是在XGB中需要使用32位的浮點型儲存。

    計算代價小,在XGB中計算分裂增益的時候需要遍歷每一個特征值然后計算一個增益,而在直方圖的算法中只需要計算K次,時間復雜度直接由原來的feature變成了現在的k而我們知道data>>k

    當然我們說這種方法值最好的嘛?他有什么樣的缺點呢?

    Histogram算法并不完美,由于特征被離散化后,找到的并不是一個準確的切分點,所以對結果會產生影響,但是我們發現到形成的最終的這個強學習器并不會差,有時候甚至更好,原因是什么?

    原因就是說里邊的每個模型本來就是弱學習器,分割點不精確并不是特別的重要,比較粗糙的分割點真好還能起到正則化的作用,可以有效的防止過擬合,雖然每棵樹上的訓練誤差稍大,但是在總體的框架下并沒有什么太大的影響。

    怎么做的差?

    假如說我有x個數據,然后我是可是可以構建出來一個k個桶的直方圖,然后,我的左子節點上的數據由x1個數據,同樣是不是也可以得到一個k個桶的直方圖,那么我右子節點上是不是就有(x-x1)個樣本數據,是不是就可以通過x的直方圖減去x1的直方圖。

    帶深度限制的Leaf-wise算法

    XGB使用的是level-wise按層生長的策略,這種策略容易進行并行化處理,也好控制模型的復雜度,同時也可以防止過擬合,但是這種方式其實是很低效的,因為這種按層去分的話,每次構建其中的一層,但是實際上呢,速度是比較慢的,因為有的葉子節點的增益下降是比較慢的,也就是說在這一步沒有必要將這個節點繼續的進行劃分,但是卻以同樣的權重去關注同一層的每個葉子節點顯然是不合適的。去劃分它顯然是不合適的。

    而LightGBM采用的是Leaf-wise的增長策略,就是說,每次都從所有的葉子節點中找出,增益最大的葉子節點去進行劃分,這樣的話是不是每次都可以下降最多的誤差,得到更好的精度,但是缺點呢就是,可能會長出一顆比較深的樹,然后導致了過擬合,但是LightGBM在Leaf-wise的基礎上加上了一個最大深度的限制,在保證高效的同時還防止了過擬合。

    單邊梯度采樣算法

    GOSS算法,這個算法的思想就是,從減少樣本的角度出發,排除大部分的小梯度的樣本,僅僅用剩下的樣本計算目標函數增益,它是一種在減少數據和保證精度上平衡的算法。

    在GBDT中發現每個樣本都有相應的梯度值,梯度小的樣本,訓練誤差也小,說明該樣本已經很好的被模型給學習到了,直接想法就是丟掉這一部分數據,但是直接丟掉的話,就會影響到數據的分布,從而導致影響模型的精度,因此為了解決這個問題,提出了GOSS算法。GOSS是一個采樣的算法,目的是為了丟棄一些對計算信息增益沒有用的樣本,留下對計算有用的歐陽本,也說到了,梯度大的對計算增益是有幫助的,梯度小的樣本是沒有幫助的,但是在其中又不能直接的丟棄,那他是怎么做的?

    首先它對于樣本的梯度進行一個排序,比如說我設定一個閾值0.5那么梯度大于0.5的樣本我全部留下,梯度小于0.5的我按照一定的比例去隨機的采樣,比如說我從里邊抽取了1/3的樣本。然后使用這樣的數據進行訓練。

    互斥特征捆綁算法

    數據通常都是高緯稀疏的數據,并且通常數據呢都是稀疏的,什么意思?比如說one-hot類型的數據,每一列都是0只有一個值是1,如果數據的維度太高的話會出現什么情況,模型復雜,計算繁瑣,時間復雜度高,如果將數據的維度進行壓縮一下,那么速度是不是也會由很大的提升,那么怎么去通過一種無損的壓縮來很好的減少特征的數量呢?我們發現,數據一般都是互斥的,什么是互斥的,就像one-hot中很多特征全是0,只有一個是1,那么也就是說只要我任意的兩個特征不同時為非0值,那么這兩個特征都是互斥的,我們就可以把特們綁到一起去組合成一個新的特征,但是實際中不存在完全互斥的數據吧,那么怎么辦,仍然是采用近似互斥的方法,也就是說,我們允許一些非互斥的存在,那么我們去衡量這個不互斥的情況就稱作為沖突比率,當這個比率比較小是,就可以將兩個特征進行捆綁,而不影響精度,那么怎么去衡量兩個特征之間能不能捆綁呢?

    它有這個衡量公式,r是每個綁定中的最大沖突比率,當r相對較小是,完成它們速度和精度之間的一個平衡。

    LightGBM的優缺點:

    優點:

    從內存和速度兩方面去考慮

  • 速度:

  • LightGBM采用了直方圖算法將遍歷樣本轉變為遍歷直方圖,極大的降低了時間的復雜度;

    LightGBM在訓練的過程當中采用了單邊梯度算法過濾掉了梯度比較小的樣本,減小了計算量

    LightGBM采用了Leaf-wise算法的增長策略構建樹,減小了很多不必要的計算量

    LightGBM采用了特征并行,數據并行的方法加速計算,當數據量非常大的時候還可以采用投票并行的策略

    LightGBM對緩存也進行了優化,增加了緩存命中率

  • 內存:

  • 通過直方圖算法將原本的儲存特征值,轉變為了儲存箱子的值,降低了內存的消耗

    在訓練過程當中,采用互斥特征捆綁算法,減少了特征數量,降低了內存的消耗

    Lightgbm = xgboost + 直方圖(減小了內存儲存的消耗) + leaf wise(構建樹提升速度) + 單邊梯度下降(從減少數據量) + 互斥特征捆綁(從減少特征)

    總結

    以上是生活随笔為你收集整理的LightGBM详细的全部內容,希望文章能夠幫你解決所遇到的問題。

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