機器學習技法11: Gradient Boosted Decision Tree(GBDT)



上一節課介紹了隨機森林(RF),這個模型基本上就是遞歸的決策樹(DT),其核心思想是通過Bagging的方式做出不一樣的DT,最後再將它們融合起來。相比一般的決策樹,其加入了很多隨機因素;並且它可以實現自我驗證,從而省去了劃分訓練集和驗證集重新訓練的過程;同時,還通過permutation test實現特徵選擇,達到降低模型複雜度的目的。本節課介紹Gradient Boosted Decision Tree。

11.1 Adaptive Boosted Decision Tree

隨機森林算法是通過Bagging算法中的bootstrapping對數據集進行重採樣,生成很多個樣本子集,讓後使用決策樹訓練這些樣本子集得到不同的假設函數 gtg_t ,最後通過投票的方式融合這些不一樣的 gtg_t,得到 GG。現在的思路是將Bagging替換爲AdaBoost,即在每次重採樣的過程中,會賦予不同的樣本不同的權重 u(t)u^{(t)} 得到不同的樣本子集,然後使用決策樹訓練這些樣本子集得到不同的假設函數 gtg_t,最後對這些假設函數 gtg_t 進行線性組合,而不是使用Bagging的投票方式進行組合。這種模型稱爲AdaBoost-DTree。
在這裏插入圖片描述

下一步的工作就是要計算在AdaBoost­-DTree中每個樣本的權重 u(t)u^{(t)} 。在AdaBoost算法中,使用了重採樣, u(t)u^{(t)} 表示在數據集 DD 中的每個樣本在樣本子集 D~\tilde{D} 中出現的次數。但是決策樹算法中並未引入樣本權重,如何在不改變決策樹算法基礎上引入樣本權重,實現AdaBoost-DTree呢?思路是通過weighted algorithm,即求每個犯錯誤的樣本點乘以相應的權重的和,再取平均,得到目標函數 Einu(h)E^{u}_{in}(h)
在這裏插入圖片描述

爲了不改變決策樹算法,對樣本子集 D~\tilde{D} 進行處理。在Bagging算法中的Weighted uu 概念是說某一樣本在拔靴法重採樣中出現的次數。更一般地,基於隨機的思想,可以根據 uu ,對原數據集 DD 進行帶權重的重採樣得到不同的樣本子集 D~\tilde{D},樣本子集中沒有樣本出現的概率,與它的權重 uu 所佔的比例是近似的。至此,可以將 D~\tilde{D} 代入決策樹訓練得到不同的假設函數 gtg_t,而無需改變決策樹算法。
在這裏插入圖片描述

AdaBoost-DTree 通過重採樣代替了AdaBoost算法中的計算樣本誤差的過程,但效果相同,並且並未改變決策樹算法,同時結合了兩種算法的優點,可以描述爲:
在這裏插入圖片描述

下面討論如何計算對不同的 gtg_t 線性組合中的權重 αt\alpha_t 的計算。
在這裏插入圖片描述

其中 ϵt\epsilon_t 表示假設函數 gtg_t 的錯誤率。如果現在有一個由所有樣本訓練得到的完全成長樹(fully grown tree),若每個樣本都不相同,則可以得到 Ein(gt)=0E_{in}(g_t) =0,並且可以推導出:
在這裏插入圖片描述
αt=\alpha_t = \infty 的意思是說其所對應的假設函數自己決定了 GG ,其它的假設函數不起作用。這樣的結果當然不是所期望的。造成這種結果的原因是:一個是使用所有樣本訓練;另一個是節點過多。針對這些問題,可以修剪(prun)決策樹,避免得到完全成長樹,也就是AdaBoost­-DTree所使用的pruned DTree的方法。這樣就可以將弱弱的樹進行組合,得到 GG ,避免只由一個 gtg_t 決定 GG 的情況。
在這裏插入圖片描述

此時,AdaBoost­-DTree可以描述爲:
在這裏插入圖片描述

那麼有沒有更簡單的方式對AdaBoost­-DTree進行修剪呢?一種想法是,每棵樹只有一個節點,即只做一次二叉樹,生成兩個分支。回顧之前所學的分支準則 b(x)b(x)
在這裏插入圖片描述
二叉樹相當於二分類,此時公式中的不純淨度(impurity)即爲二分類的誤差。此時的AdaBoost­-DTree就跟AdaBoost­-Stump一樣,也就是說AdaBoost­-Stump是AdaBoost­-DTree的一種特殊情況。當只有一個節點時,錯誤率很難爲0,一般再做重採樣操作,而是直接將權重 uu 代入算法中。AdaBoost­-Stump旨在直接使用權重 uu 組合模型,達到簡化算法複雜度的目的。


習題1:
在這裏插入圖片描述


11.2 Optimization View of AdaBoost

首先回顧一下AdaBoost算法的權重迭代公式:
在這裏插入圖片描述
原表達式是條件表達式,爲了簡化,可以進行簡化,得到上式結果。進一步推導得:
在這裏插入圖片描述
由以上推導,易知有以下正比關係:
在這裏插入圖片描述
接下來討論voting score 和Margin之間的關係:
在這裏插入圖片描述
可以將voting score看做 gt(xn)g_t(x_n) 的線性組合,權重爲 αt\alpha_t。由之前所學,gt(xn)g_t(x_n) 相當於對輸入樣本 xnx_n 做了特徵轉換 ϕi\phi_i ,然後進行線性組合,權重爲 wiw_i。由SVM的margin計算公式可知,其表示支持向量到邊界的距離。SVM的目標是使margin儘可能的寬,這與 G(xn)G(x_n) 有異曲同工之妙,公式中的voting score要儘可能的大,才能保證邊界儘可能的寬。進一步推導得:
在這裏插入圖片描述
unT+1u^{T+1}_n 的表達式可知,當voting score越大時,unT+1u^{T+1}_n 越小。在AdaBoost算法中,樣本權重 u(t)nu^(t)_n 逐漸減小,直到unT+1u^{T+1}_n 達到最小。對於所有樣本來說也有類似結論,即:
在這裏插入圖片描述
上式中括號內的藍色部分稱爲 linear score,有如下性質:
在這裏插入圖片描述
現在的目標就變爲最小化 err^ADA\hat{err}_{ADA}。下面繼續推導AdaBoost的誤差函數,首先考慮使用梯度下降算法求解。
在這裏插入圖片描述
上式中,wtw_t 爲泰勒展開的位置,vv 是所要求解的梯度下降的最佳方向,即梯度Ein(wt)∇E_{in}(w_t) 的反方向,η\eta 是每次更新的步長。現在將梯度下降的算法應用到AdaBoost的誤差函數中,只不過方向變爲假設函數 gtg_t ,而不是向量 wtw_t ,二者的區別是連續與離散的關係,但在梯度下降過程中沒有影響。繼續推導得到AdaBoost的誤差函數,其中,h(xn)h(x_n) 表示當前的方向,如果要最小化誤差函數 E^ADA\hat{E}_{ADA},則上式中的第二項要儘可能的小,現在的目標就變爲最小化該項。
在這裏插入圖片描述

下面對 h(xn)h(x_n) 做進一步推導:
在這裏插入圖片描述
至此,AdaBoost中的基本演算法找到了梯度下降過程中最好的更新方向。
在這裏插入圖片描述

上式中,更新步長 η\eta 還未確定,其計算方法是在假設函數 gtg_t 求解出之後,作爲參數,通過最小化 E^ADA\hat{E}_{ADA} 得到。
在這裏插入圖片描述
最小化的目標是在最好的更新方向上找到最大更新步長。
在這裏插入圖片描述

由以上推導可知,最大的更新步長就是 αt\alpha_t,即AdaBoost算法中,某一假設函數 gtg_t 的權重。實際上,AdaBoost算法通過梯度下降算法尋找梯度下降最快的方向和最大的更新步長。這裏的方向就是假設函數 gtg_t,更新步長是 αt\alpha_t


習題2:
在這裏插入圖片描述


11.3 Gradient Boosting

上一小節介紹了使用梯度下降對AdaBoost進行最優化。其針對二分類的情況目標函數可以描述爲:
在這裏插入圖片描述
對於不同的誤差函數,上式仍然成立,更一般地,可以描述爲:
在這裏插入圖片描述
核心思想沒有改變,仍然是通過梯度下降,求解梯度下降最快的方向 h(xn)h(x_n) 和最大的更新步長 η\eta。分析了分類的求解方式,接下來看一下如何求解迴歸問題的Gradient Boosting的目標函數。使用梯度下降的思想,按一階泰勒公式展開,寫成梯度的形式:
在這裏插入圖片描述
由於迴歸問題的目標函數是平方項,所以求導之後爲 2(snyn)2(s_n-y_n)。上式中,灰色的部分表示常數,對求解過程沒有影響,可以忽略。
在這裏插入圖片描述
實際上,h(xn)h(x_n) 的長度並不重要,因爲其只決定梯度下降的方向,所以爲了避免其長度的影響,需要對其加以限制,常用號的做法是把 h(xn)h(x_n) 當做一個懲罰項 h2(xn)h^2(x_n) 添加到上述目標函數中,這與迴歸問題的目標函數類似。經過簡化之後得到:
在這裏插入圖片描述
上式是一個完全平方和公式,其中,ynsny_n-s_n 表示當前第 nn 個樣本真實值和預測值的差,稱之爲殘差(residual)。要最小化目標函數,即讓 h(xn)h(x_n) 儘可能的接近殘差。對所有樣本點做迴歸,得到的方程就是要求解的假設函數 gt(xn)g_t(x_n)。然後求解更新步長:
在這裏插入圖片描述
同樣的道理,要最小化該目標函數,需要讓 ηgt(xn)\eta g_t(x_n) 儘可能地接近殘差 ynsny_n-s_n。利用梯度下降優化算法,對所有樣本點做迴歸,即可求解得到最大的更新步長 η\eta
在這裏插入圖片描述
將上述算法組合起來就成爲Gradient Boosted Decision T ree (GBDT)。
在這裏插入圖片描述
關於Decision Tree的部分存在於對每個樣本點做迴歸的過程中,即可以使用決策樹來對每個樣本點做迴歸。算法中梯度下降的更新方向 gtg_t 通過決策樹做迴歸求解;更新步長 η\eta 通過線性迴歸求解。AdaBoost­-DTree用於二分類任務,GBDT用於迴歸任務。可以認爲GBDT是AdaBoost­-DTree的迴歸版本。


習題3:
在這裏插入圖片描述


11.4 Summary of Aggregation Models

至此機器學習技法課程中的集成學習算法已經介紹完了,本小節總結一下。

本門課程介紹的第一個集成學習算法是Blending,其核心思想是將求解出的不同的假設函數 gtg_t 融合(aggregation)起來,得到最終的假設函數 GG 。融合 gtg_t 的方式有三種:

  • uniform:對所有 gtg_t 的預測輸出取平均值;
  • non-uniform:對所有的 gtg_t 進行線性融合;
  • conditional:對所有的 gtg_t 進行加權融合。

uniform採用取平均的方式,很穩定;non-uniform和conditional可以求出很複雜的模型,但容易過擬合。
在這裏插入圖片描述
Blending算法是建立在 gtg_t 的前提之下,如果 gtg_t 未知,則稱爲融合學習模型(Aggregation-Learning Models),求解 gtg_t 的同時,將它們融合。learning通常由三種:

  • Bagging:通過拔靴法(bootstrapping)將原數據集重採樣出許多個小的樣本子集,然後使用演算法分別求解得到假設函數 gtg_t ,計算所有 gtg_t 的預測輸出的平均值,從而融合成 GG
  • AdaBoost:同樣通過拔靴法(bootstrapping)得到不同的假設函數 gtg_t ,然後對這些 gtg_t 進行線性組合得到 GG
  • Decision Tree:通過二叉樹的形式,將輸入空間進行逐次劃分,劃分完成後的葉子就是假設函數 gtg_t,然後對這些 gtg_t 進行加權組合得到 GG
    在這裏插入圖片描述
    還可以將這些基本的集成學習模型進行組合得到更復雜的模型。比如:
    在這裏插入圖片描述
    集成學習模型(融合模型)有以下優點:
    在這裏插入圖片描述
    即不但可以防止欠擬合,同時還具有正則化效果,可以有效地防止過擬合。

習題4:
在這裏插入圖片描述


Summary

本節課介紹了Gradient Boosted Decision Tree,該算法通過sampleing和pruning將AdaBoost和Decision Tree算法結合了起來。接下來介紹了從優化的角度分析AdaBoost,其求解假設函數的過程就是尋找最佳的梯度下降方向和步長的過程。將該思想擴展,引出了Gradient Boosting算法,其本質上是在做residual fitting。最後將其與決策樹結合,介紹了GBDT模型。第四小節總結了所學的融合模型(集成學習模型)。
在這裏插入圖片描述


參考:
https://github.com/RedstoneWill/HsuanTienLin_MachineLearning

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章