隨機森林RF、XGBoost、GBDT和LightGBM的原理和區別


1、基本知識點介紹

  • RandomForest、XGBoost、GBDT和LightGBM都屬於集成學習。

  • 集成學習通過構建並結合多個分類器來完成學習任務,也稱為多分類系統,集成學習的目的是通過結合多個機器學習分類器的預測結果來改善基本學習器的泛化能力和魯棒性。

  • 集成學習方法大致分為兩類:

    • 基本學習器之間存在強依賴關系、必須串行生成的序列化方法,即Boosting提升方法。

    • 基本學習器之間不存在強依賴關系、可同時生成的並行化方法,即Bagging方法。

2、各個算法原理

2.1 隨機森林 -- RandomForest

  • RF原理:RF是Bagging的擴展變體,它在以決策樹為基礎學習器構建Bagging集成的基礎上,進一步在決策樹的訓練過程中引入了隨機特征選擇,其流程大概分為四個步驟:

    1. 隨機選擇樣本(放回抽樣)。

    2. 隨機選擇特征屬性。

    3. 構建決策樹。

    4. 隨機森林投票(平均)。

因此防止過擬合能力更強,降低方差。

  • Bagging,即套袋法,算法過程如下:

    1. 從原始樣本集中抽取訓練集。每輪從原始樣本集中使用Bootstraping的方法抽取n個訓練樣本,共進行k輪抽取,得到k個訓練集。

    2. 每次使用一個訓練集得到一個模型,k個訓練集共得到k個模型。(模型可以根據具體問題具體選取,如決策樹,SVM,感知機。)

    3. 對於分類問題:將上面得到的k個模型采用投票的方式得到分類結果;

      對於回歸問題:計算上述模型的均值作為最后的結果。(因為所有模型的重要性是相同的)
      
  • RF和Bagging對比: RF的起始性能較差,特別當只有一個基學習器時,隨着學習器數目增多,隨機森林通常會收斂到更低的泛化誤差。隨機森林的訓練效率也會高於Bagging,因為在單個決策樹的構建中,Bagging使用的是‘確定性’特征數,在選擇特征划分結點時,要對所有的特征進行考慮,而隨機森林使用的是‘隨機性’特征數,只需考慮特征的子集。

2.2 XGBoost算法

  • XGBoost原理:XGBoost屬於集成學習Boosting,是在GBDT的基礎上對Boosting算法進行的改進,並加入了模型復雜度的正則項。GBDT是用模型在數據上的負梯度作為殘差的近似值,從而擬合殘差。XGBoost也是擬合數據殘差,並用泰勒展開式對模型損失殘差的近似,同時在損失函數上添加了正則化項。

\[Obj^{t} = \sum_{i=1}^{n} L(y_{i}, \hat{y}_{i}^{(t-1)} + f_{t}(x_{i})) + \Omega (f_{t}) + constant \]

其中\(\sum_{i=1}^{n} L(y_{i}, \hat{y}_{i}^{(t-1)})\)為損失函數,紅色方框為正則項,包括L1、L2;紅色圓圈為常數項。

  • L1正則化項:$$L(\omega) = \frac{1}{N} \sum_{i=1}^{N} (f(x_{i}) - y_{i})^{2} + \frac{\lambda}{2} ||\omega||^{1}$$

  • L2正則化項:$$L(\omega) = \frac{1}{N} \sum_{i=1}^{N} (f(x_{i}) - y_{i})^{2} + \frac{\lambda}{2} ||\omega||^{2}$$

  • XGBoost與GBDT算法的區別:

    • 傳統的GBDT在優化的時候只用到了一階導數信息,而XGBoost則對代價函數進行了二階泰勒展開,得到一階和二階導數,並且XGBoost在代價函數中加入了正則項,用於控制模型的復雜度。

    • 另外XGBoost還支持線性分類器,通過在代價函數中加入正則項,降低了模型的方差,使學習出來的模型更加簡單,避免過擬合。

  • GBDT的基本原理是Boosting里面的boosting tree(提升樹),並使用gradient boost。其關鍵是利用損失函數的負梯度方向在當前模型的值作為殘差的近似值,進而擬合一顆CART回歸樹(classification and regression tree)。

2.3 GBDT算法(Gradient Boosting Decision Tree)

  • GBDT算法原理:指通過在殘差減小的梯度方向建立boosting tree(提升樹),即gradient boosting tree(梯度提升樹)。每次建立新模型都是為了使之前模型的殘差往梯度方向下降。

\[r_{ti} = -[\frac{\partial L(y_{i}, f(x_{i}))}{\partial f(x_{i})}]_{f(x)=f_{t-1}(x)} \]

\[c_{tj} = arg \ \min\limits_{c} \sum\limits_{x_{i} \in R_{tj}} L(y_{i}, f_{t-1}(x_{i}) + c) \]

  • GBDT缺點:GBDT會累加所有樹的結果,此過程無法通過分類完成,因為GBDT需要按照損失函數的梯度近似地擬合殘差,這樣擬合的是連續數據,因此只能是CART回歸樹,而不能是分類樹。

2.4 LightGBM提升學習模型

  • lightGBM,它是微軟出的新的boosting框架,基本原理與XGBoost一樣,使用基於學習算法的決策樹,只是在框架上做了一優化(重點在模型的訓練速度的優化)。

  • 直方圖算法的基本思想是先把連續的浮點特征值離散化成k個整數,同時構造一個寬度為k的直方圖。在遍歷數據的時候,根據離散化后的值作為索引在直方圖中累積統計量,當遍歷一次數據后,直方圖累積了需要的統計量,然后根據直方圖的離散值,遍歷尋找最優的分割點。

  • lightGBM與XGBoost的區別:

    • xgboost采用的是level-wise的分裂策略,而lightGBM采用了leaf-wise的策略。
      • level-wise:指對每一層所有節點做無差別分裂,可能有些節點的增益非常小,帶來了沒必要的開銷。
      • leaf-wise:指在當前所有葉子節點中選擇分裂收益最大的節點進行分裂,如此遞歸進行,容易出現過擬合,因此需要做最大深度限制,從而避免過擬合。
    • lightGBM使用了基於histogram(直方圖)的決策樹算法,而XGBoost使用了exact算法(需要提前預排序)。
      • 能減少內存消耗(#data* #features * 1Bytes),降低計算代價,因為其只需要保存特征離散化之后的值。
      • 而XGBoost使用exact算法,內存消耗為(2 * #data * #features* 4Bytes),因為XGBoost既要保存原始feature的值,也要保存這個值的順序索引。
      • XGBoost的預排序算法在選擇好分裂特征計算分裂受益時,需要遍歷所有樣本的特征值,時間復雜度為(#data),與數據量成正比。而lightGBM的直方圖只需要遍歷分區的直方桶即可,時間復雜度為(#bin)。
    • lightGBM的直方圖還能做減差加速作用。
      • 一個子節點的直方圖可以通過父節點的直方圖減去兄弟節點的直方圖即可得到,從而實現加速。
    • lightGBM支持直接輸入類別categorical的特征feature。
      • 在對離散特征分裂時,每個取值都當作一個桶,分裂時的增益為“是否屬於某個類別category”的gain。類似與one-hot編碼。
    • lightGBM實現可多線程優化。(即能夠在同一時間執行多個線程,提升整體性能)
    • lightGBM做了並行處理。
      • feature parallel(特征並行處理):一般的feature parallel就是對數據做垂直分割(partiion data vertically,就是對屬性分割),然后將分割后的數據分散到各個worker上,各個workers計算其擁有的數據的best splits point, 之后再匯總得到全局最優分割點。lightgbm的做法是每個worker都擁有所有數據,再分割。——我也沒懂
      • data parallel(數據並行處理):傳統的data parallel是將對數據集進行划分,也叫 平行分割(partion data horizontally), 分散到各個workers上之后,workers對得到的數據做直方圖,匯總各個workers的直方圖得到全局的直方圖。 lightgbm的做法是使用”Reduce Scatter“機制,不匯總所有直方圖,只匯總不同worker的不同feature的直方圖(原理?),在這個匯總的直方圖上做split,最后同步。

參考
1、牛人:https://blog.csdn.net/zwqjoy/article/details/82150528

2、周志華《機器學習》

3、劉建平GBDT:https://www.cnblogs.com/pinard/p/6140514.html

4、大牛XGBoost:https://www.cnblogs.com/zhouxiaohui888/p/6008368.html


免責聲明!

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



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