1. 程式人生 > >機器學習 - 提升樹(上)- BT、GBDT

機器學習 - 提升樹(上)- BT、GBDT

機器學習 - 提升樹(上)- BT、GBDT

在之前對整合學習的兩大框架 Bagging 與 Boosting 經過講解,並對 Bagging 實現的一種演算法 —— 隨機森林進行了介紹。那麼今天就對 Boosting 的實現演算法進行介紹。

  • BT(Boosting Tree)

    1. 介紹

      BT(Boosting Tree),提升樹,是以決策樹作為基分類器的 Boosting 方法,對分類問題決策樹是分類二叉樹且使用指數損失函式,對迴歸問題決策樹使用迴歸二叉樹,並採用平方差損失函式。提升樹被認為是統計學習中效能最好的方法之一。

    2. 原理

      提升樹演算法的精髓可以用一個詞來表達:“殘差”。在加法模型與前向分步演算法的應用過程中,每一個基分類器學習的目標都是上一個基分類器預測值與真實值之間的誤差值,這個誤差值被稱為 “殘差”。

      對於二分類問題,提升樹只需將 AdaBoost 演算法中 的基分類器限制為二分類樹即可。下面敘述迴歸問題的提升樹。


      對迴歸問題使用前向分步演算法,其中 f m f_m 為第 m 次迭代的模型, T

      m T_m 為第 m 次學得的決策樹。:

      { f 0 ( x ) f m ( x ) = f m 1 + T m ( x ) m = 1 , 2 , . . . , M f M ( x ) = m = 1 M T m ( x ) \begin{cases} f_0(x)\\ …\\ …\\ f_m(x)=f_{m-1}+T_m(x),m=1,2,...,M\\ \end{cases} \Longrightarrow f_M(x)=\sum_{m=1}^{M}T_m(x)

      採用平方差損失函式 L ( y , f ( x ) ) = [ y f ( x ) ] 2 L(y,f(x))=[y-f(x)]^2 時,其損失變為:

      L ( y , f m 1 + T m ( x ) ) = [ y ( f m 1 + T m ( x ) ) ] 2 L(y,f_{m-1}+T_m(x))=[y-(f_{m-1}+T_m(x))]^2
                                             = [ ( y f m 1 ) T m ( x ) ] 2 =[(y-f_{m-1})-T_m(x)]^2
                                             = ( r T m ( x ) ) 2 =(r-T_m(x))^2 ,其中 r = y f m 1 r=y-f_{m-1}

      對於學習第 m 棵樹來講,它所面對的真實標籤值為 r r ,而 r r 又是 m-1 次預測值與真實值之間的差,所以第 m 次學習的目標就是上一輪的殘差。

    3. 演算法過程

      (1) 初始化: f 0 ( x ) = 0 f_0(x)=0

      (2) 對 m=1,2,…,M

      ① 計算殘差: r m i = y i f m 1 ( x i ) i = 1 , 2 , . . . , n r_{mi}=y_i-f_{m-1}(x_i),i=1,2,...,n

      ② 將殘差作為訓練資料學習一個迴歸樹: T m ( x ) T_m(x)

      ③ 更新模型: f m ( x ) = f m 1 + T m ( x ) f_m(x)=f_{m-1}+T_m(x)

      (3) 得到提升樹: f M ( x ) = m = 1 M T m ( x ) f_M(x)=\sum_{m=1}^{M}T_m(x)

    4. 舉例

      x i x_i 1 2 3 4 5 6 7 8 9 10
      y i y_i 5.56 5.7 5.91 6.4 6.8 7.05 8.9 8.7 9 9.05

      (對於學習迴歸樹的演算法過程可參閱 決策樹 - CART

      (1) 求出切分點:<0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5>

      (2) 以 切分點 s1 = 1.5 為例。s1 將資料劃分為 R1={x1},R1={x2,x3,…,x10}

      (3) 對 R1,R2 中的 元素值 計算平均值 c1,c2 ,而後計算損失m1,m2. 其中 c1,c2 視作 R1,R2 結點的預測值。

             e 1 = x i R 1 ( y i c 1 ) 2 = 0 e 2 = x i