1. 程式人生 > >機器學習筆記10-梯度提升樹(GBDT)

機器學習筆記10-梯度提升樹(GBDT)

機器學習筆記10-梯度提升樹(GBDT)

上一節中講到了整合學習的Boosting方法,並詳細解釋了其中的代表性演算法AdaBoost演算法。除了AdaBoost演算法外,Boosting中還有另一個非常常用的演算法:提升樹和梯度提升樹(GBDT)。

  1. 提升樹
    提升樹是以分類樹或迴歸樹為基本分類器的提升方法,可以表示為加法模型: f M

    ( x ) = m = 1
    M
    T ( x ; θ m
    )
    {f_M}(x) = \sum\limits_{m = 1}^M {T(x;{\theta _m})} ,其中 T ( x ; θ m ) {T(x;{\theta _m})} 表示決策樹, θ m \theta _m 表示決策樹的引數,M為決策樹的個數。提升樹演算法採用前向分步演算法。首先確定 f 0 ( x ) = 0 f_0(x)=0 ,第m步的模型是
    f m ( x ) = f m 1 ( x ) + T ( x ; θ m ) {f_m}(x) = {f_{m - 1}}(x) + T(x;{\theta _m}) 其中, f m 1 ( x ) f_{m-1}(x) 為當前模型,通過極小化損失函式確定下一棵決策樹的引數 θ m \theta_m
    θ ^ m = arg m i n θ m i = 1 N L ( y i , f m 1 ( x i ) + T ( x i ; θ m ) ) {{\hat \theta }_m} = \arg {\rm{ }}\mathop {{\rm{min}}}\limits_{{\theta _m}} \sum\limits_{i = 1}^N {L({y_i},{f_{m - 1}}({x_i}) + T({x_i};{\theta _m}))} 針對不同問題的提升樹學習演算法,其主要區別在於使用的損失函式不同。包括用平方誤差損失函式的迴歸問題,用指數損失函式的分類問題,以及用一般損失函式的一般決策問題。對於二類分類問題,提升樹演算法只需要將上一節中的AdaBoost演算法中的基分類器限制為二類分類樹。以下敘述迴歸問題的提升樹:
    此時損失函式為:
    L ( y , f m 1 ( x ) + T ( x ; θ m ) ) = ( y f m 1 ( x ) T ( x ; θ m ) ) 2 = ( r T ( x ; θ m ) ) 2 L(y,{f_{m - 1}}(x) + T(x;{\theta _m})) = {(y - {f_{m - 1}}(x) - T(x;{\theta _m}))^2} = {(r - T(x;{\theta _m}))^2} 這裡 r = y f m 1 ( x ) r=y-f_{m-1}(x) ,是當前模型擬合數據的殘差。具體地,其演算法可表述為:
    (1)初始化 f 0 ( x ) = 0 f_0(x)=0
    (2)對 m = 1 , 2 , . . . , M m=1,2,...,M
    (i)計算殘差 r m i = y i f m 1 ( x ) r_{mi}=y_i-f_{m-1}(x)
    (ii)擬合殘差 r m i r_{mi} 學習一個迴歸樹,得到 T ( x ; θ m ) T(x; {\theta}_m) ,這一步可參考決策樹那一節;
    (iii)更新 f m ( x ) = f m 1 ( x ) + T ( x ; θ m ) {f_m}(x) = {f_{m - 1}}(x) + T(x;{\theta _m})
    (3)得到迴歸樹模型 f M ( x ) = m = 1 M T ( x ; θ m ) {f_M}(x) = \sum\limits_{m = 1}^M {T(x;{\theta _m})}

  2. 梯度提升樹(GBDT)
    提升樹當損失函式是平方損失或指數損失函式時,每一步優化都很簡單。但對於一般損失函式是,每一步優化都不容易。利用梯度提升樹可以解決這個問題。它利用了最速下降法的近似方法,其關鍵是利用損失函式的負梯度在當前模型的值
    [ L ( y , f ( x i ) ) f ( x i ) ] f ( x ) = f m 1