04-06 梯度提高樹

更新、更全的《機器學習》的更新網站,更有python、go、數據結構與算法、爬蟲、人工智能教學等着你:http://www.javashuo.com/article/p-vozphyqp-cm.htmlpython

梯度提高樹

梯度提高樹(gradien boosting decision tree,GBDT)在工業上用途普遍,屬於最流行、最實用的算法之一,梯度提高樹能夠當作是提高樹的優化版。算法

1、梯度提高樹學習目標

  1. 梯度提高樹和提高樹
  2. 迴歸梯度提高樹流程
  3. 梯度提高樹優缺點

2、梯度提高樹詳解

2.1 梯度提高樹和提高樹

梯度提高樹其實流程和提高樹差很少,可是在損失函數擬合方面,提高樹損失函數擬合用的是平方損失,而梯度提高樹則是使用損失函數的負梯度來擬合本輪損失的近似值,進而擬合一個迴歸樹。數據結構

\(t\)輪第\(i\)樣本的損失函數的負梯度表示爲
\[ r_{ti}=-{[\frac{\partial{L(y_i,f(x_i))}}{\partial{f(x_i)}}]}_{f(x)=f_{t-1}(x)} \]
利用\((x_i,r_{ti}),\quad(i=1,2,\cdots,m)\),咱們能夠擬合一顆CART迴歸樹,獲得了第\(t\)棵迴歸樹,它對應的葉節點區域爲\(R_{tj},\quad(j=1,2,\cdots,J)\),其中\(J\)爲葉子節點數。機器學習

3、迴歸梯度提高樹流程

3.1 輸入

\(m\)個數據\(n\)個特徵的訓練數據集\(T=\{(x_,y_1),(x_2,y_2),\cdots,(x_m,y_m)\}\),損失函數爲\(L(y,f(x))\)函數

3.2 輸出

迴歸樹\(\hat{f(x)}\)學習

3.3 流程

  1. 初始化
    \[ f_0(x) = \underbrace{arg\,min}_c\sum_{i=1}^mL(y_i,c) \]
  2. \(i=1,2,\cdots,m\)
    1. \(i=1,2,\cdots,m\),計算
      \[ r_{mi}=-{[\frac{\partial{L(y_i,f(x_i))}}{\partial{f(x_i)}}]}_{f(x)=f_{m-1}(x)} \]
    2. \(r_{mi}\)擬合一個迴歸樹,獲得第\(m\)棵樹的葉節點區域\(R_{mi},\quad{j=1,2,\cdots,J}\)
    3. \(j=1,2,\cdots,J\),計算
      \[ c_{mj} = \underbrace{arg\,min}_c\sum_{x_i\in{R_{mj}}}L(y_i,f_{m-1}(x_i)+c) \]
    4. 更新
      \[ f_m(x)=f_{m-1}(x)+\sum_{j=1}^Jc_{mj}I(x\in{R_{mj}}) \]
  3. 獲得迴歸樹
    \[ \hat{f(x)}=f_M(x)=\sum_{i=1}^M\sum_{j=1}^Jc_{mj}I(x\in{R_{mj}}) \]

4、梯度提高樹優缺點

4.1 優勢

  1. 相比較SVM,較少的調參時間便可獲得一個準確率還不錯的模型
  2. 相比較提高樹,利用了損失函數的負梯度在當前模型的值做爲提高樹算法中殘差值的近似值,即對於迴歸和分類問題找到了一種通用的擬合損失偏差的方法

4.2 缺點

  1. 因爲弱學習器之間存在依賴,沒法支持並行

5、小結

梯度提高樹雖然在某種程度解決了提高樹對於分類和迴歸問題使用不一樣的損失函數的問題,而且使用損失函數的負梯度做爲提高樹算法殘差值的近似值,提高了模型的準確度,可是他還沒法作到並行。下面介紹的XgBoost做爲GBDT的升級版,將會解決這個問題。優化

相關文章
相關標籤/搜索