04-05 提高樹

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

提高樹

提高樹(boosting tree)是以分類樹或迴歸樹做爲弱學習器的強學習器。算法

提高樹模型用的是加法模型,算法用的是前向分步算法,弱學習器是決策樹的集成學習方法。數據結構

1、提高樹學習目標

  1. 加法模型
  2. 前向分步算法
  3. 提高樹與AdaBoost算法
  4. 迴歸提高樹流程
  5. 提高樹優缺點

2、提高樹引入

假設Nick的年齡是25歲。機器學習

  1. 第1棵決策樹

把Nick的年齡設置成初始值0歲去學習,若是第1棵決策樹預測Nick的年齡是12歲,即殘差值爲\(25-12=13\)函數

  1. 第2課決策樹
    1. 把Nick的年齡設置成殘差值13歲去學習,若是第2棵決策樹能把Nick分到13歲的葉子節點,累加兩棵決策樹的預測值加和\(12+13=25\),就是Nick的真實年齡25歲
    2. 若是第2棵決策樹的獲得的是10歲,殘差值爲\(25-12-10=3\)
  2. 第3課決策樹

把Nick的年齡設置成殘差值3歲去學習……學習

  1. 繼續重複上述過程學習,不斷逼近Nick的真實年齡

3、提高樹詳解

3.1 加法模型

提高樹模型能夠表示爲決策樹的加法模型
\[ f_M(x)=\sum_{i=1}^MT(x;\theta_m) \]
其中\(T(x;\theta_m)\)表示決策樹;\(\theta_m\)表示決策樹的參數;\(M\)爲樹的個數。網站

3.2 前向分步算法

提高樹模型使用的是前向分佈算法,即假設初始提高樹\(f_0(x)=0\),第\(m\)步的模型是
\[ f_m(x)=f_{m-1}(x)+T(x;\theta_m) \]
其中\(f_{m-1}(x)\)爲當前模型,經過經驗風險極小化肯定一下課決策樹的參數\(\theta_m\)
\[ \hat{\theta_m}=\underbrace{arg\,min}_{\theta_m}\sum_{i=1}^mL(y_i,f_{m-1}(x_i)+T(x_i;\theta_m)) \]人工智能

3.3 提高樹與AdaBoost算法

AdaBoost算法使用的是前向分步算法,利用前一輪弱學習器的偏差率更新訓練數據的權重;提高樹使用的也是前向分步算法,可是提高樹如其名,他的弱學習器只能使用決策樹,通常使用CART樹,而後他的迭代思路也與AdaBoost算法不一樣spa

假設提高樹在\(t-1\)輪的強學習器爲\(f_{t-1}(x)\),目標函數是
\[ L(y,f_{m-1}(x)) \]
在第\(t\)輪的目標則是找到一個弱學習器(決策樹)\(h_t(x)\),最小化第\(t\)輪的目標函數
\[ L(y,f_m(x))=L(y_i,f_{m-1}(x)+T(x;\theta_m)) \]
可是當AdaBoost算法中的弱學習器爲二類分類樹的時候,其實AdaBoost就是提高樹,便可以說分類提高樹算法是AdaBoost算法的一種特殊狀況。

3.4 迴歸提高樹

\(m\)個數據\(n\)個特徵的訓練數據集\(T=\{(x_,y_1),(x_2,y_2),\cdots,(x_m,y_m)\}\),若是將輸入空間劃分爲\(k\)互不相交的區域\(R_1,R_2,\cdots,R_j\),而且在每一個區域上肯定輸出的常量\(c_j\),決策樹能夠表示爲
\[ T(x;\theta)=\sum_{j=1}^Jc_jI(x\in{R_j}) \]
其中,\(\theta=\{(R_1,c_1),(R_2,c_2),\cdots,(R_J,c_J)\}表示樹的區域劃分和各區域上的常數,\)J$是迴歸樹的葉節點個數。

3.4.1 前向分步算法

\[ \begin{align} & f_0(x)=0 \\ & f_1(x)=f_0(x)+T(x;\theta_1) \\ & \cdots \\ & f_m(x)=f_{m-1}(x)+T(x,\theta_m),m=1,2,\cdots,M \\ & f_M(x)=\sum_{m=1}^MT(x;\theta_m) \end{align} \]
在第\(m\)\(f_m(x)=f_{m-1}(x)+T(x,\theta_m)\)的時候,給定了\(f_{m-1}(x)\),須要求解第\(m\)棵的參數\(\hat{\theta_m}\)
\[ \hat{\theta_m} = \underbrace{arg\,min}_{\theta_m}\sum_{i=1}^mL(y_i,f_{m-1}(x_i)+T(x_i;\theta_m)) \]

3.4.2 平方偏差損失函數

對於第\(m\)棵樹的參數\(\hat{\theta_m}\),能夠採用平方偏差損失函數\(L(y,f(x))=(y-f(x))^2\)求解,樹的損失變爲
\[ \begin{align} 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 \end{align} \]
其中\(r=y-f_{m-1}(x)\)是當前模型擬合數據的殘差。

對於迴歸提高樹,只需簡單地擬合當前模型的殘差。

4、迴歸提高樹流程

4.1 輸入

\(m\)個數據\(n\)個特徵的訓練數據集\(T=\{(x_,y_1),(x_2,y_2),\cdots,(x_m,y_m)\}\)

4.2 輸出

迴歸提高樹\(f_M(x)\)

5、流程

  1. 初始化\(f_0(x)=0\)
  2. \(m=1,2,\cdots,M\)
    1. 計算殘差\(r_{mi}=y_i-f_{m-1}(x_i),\quad{i=1,2,\cdots,m}\)
    2. 擬合殘差\(r_{mi}\)學習一個迴歸樹,獲得\(T(x;\theta_m)\)
    3. 更新\(f_m(x)=f_{m-1}(x)+T(x;\theta_m)\)
  3. 獲得迴歸提高樹
    \[ f_M(x)=\sum_{i=1}^MT(x;\theta_m) \]

6、提高樹優缺點

6.1 優勢

  1. 既能夠解決分類問題,又能夠解決迴歸問題

6.2 缺點

  1. 弱學習器之間存在依賴關係,難以並行訓練
  2. 提高樹只是簡單的擬合模型的殘差,並不許確

7、小結

提高樹屬於Boosting系列算法,他和AdaBoost有類似之處的,而且當AdaBoost算法中的弱學習器爲二類分類樹的時候,梯度提高樹就是一種特殊的AdaBoost算法。

因爲提高樹是由簡單的殘差計算獲得的,因此在某種程度上來講,提高樹是有必定缺陷的,爲了解決這個問題,通常會採用梯度提高樹來彌補。

相關文章
相關標籤/搜索