統計學習方法--提升樹模型(Boosting Tree)與梯度提升樹(GBDT)


1、主要內容

  介紹提升樹模型以及梯度提升樹的算法流程

2、Boosting Tree

  提升樹模型采用加法模型(基函數的線性組合)與前向分步算法,同時基函數采用決策樹算法,對待分類問題采用二叉分類樹,對於回歸問題采用二叉回歸樹。提升樹模型可以看作是決策樹的加法模型:

  

  其中T()表示決策樹,M為樹的個數, Θ表示決策樹的參數;

  提升樹算法采用前向分部算法。首先確定f0(x) = 0,第m步的模型是:

  

  對決策樹的參數Θ的確定采用經驗風險最小化來確定:

  

  對於不同的問題采用的損失函數不同,在決策樹中使用的就是0/1損失函數,這部分的推導和前面的adaBoost中的關於分類的推導相同,不做詳細介紹。對與回歸問題來說,一般采用平方誤差函數。

  對於回歸問題,關於回歸樹的生成可以參考CART算法中回歸樹的生成。對於以下問題:

  輸入:

  輸出:fM(x)

  對於一顆回歸樹可以表示為:

  

  那么在前向分步算法的第m步中也就是求解第m個回歸樹模型時,為了確定參數需要求解:

  

  當采用平方誤差損失函數時,損失函數為:

  

  將上面的待求解式子帶入到下面的平方誤差函數中可以得到以下表達式:

  

  這就表明每一次進行回歸樹生成時采用的訓練數據都是上次預測結果與訓練數據值之間的殘差。這個殘差會逐漸的減小。

  算法流程:

  (1)、初始化f0(x) = 0;

    (2)、對於m=1,2,...,M

   (a)按照 r= yi - fm-1(x)計算殘差作為新的訓練數據的 y

   (b) 擬合殘差 r 學習一顆回歸樹,得到這一輪的回歸樹

   (c) 更新 

  (3) 得到回歸提升樹:

    

3、GBDT梯度提升樹

  對於梯度提升樹其學習流程與提升樹類似只是不再使用殘差作為新的訓練數據而是使用損失函數的梯度作為新的新的訓練數據的y值,具體的來說就是使用損失函數對f(x)求梯度然后帶入fm-1(x)計算:

  

 GDBT與提升樹之間的關系:

 提升樹模型每一次的提升都是靠上次的預測結果與訓練數據的label值差值作為新的訓練數據進行重新訓練,GDBT則是將殘差計算替換成了損失函數的梯度方向,將上一次的預測結果帶入梯度中求出本輪的訓練數據,這兩種模型就是在生成新的訓練數據時采用了不同的方法,那么在這個背后有啥區別?使用殘差有啥不好?

  李航老師《統計學習方法》中提到了在使用平方誤差損失函數和指數損失函數時,提升樹的殘差求解比較簡單,但是在使用一般的損失誤差函數時,殘差求解起來不是那么容易,所以就是用損失函數的負梯度在當前模型的值作為回歸問題中殘差的近似值。 這是不是說一般的損失函數的梯度也得好求才可以啊。


免責聲明!

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



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