Cart迴歸樹、GBDT、XGBoost

weixin_33913332發表於2019-02-28

Cart迴歸樹是許多樹模型所用到的基本樹,GBDT是一種整合提升樹,使用加法模型與前向分佈演算法,XGBoost是boosting演算法的一種,這個演算法具有廣泛的應用,能夠對模型的準確率有一個較大的提升。

1.Cart迴歸樹

通過不斷將特徵進行分裂,尋找最優劃分特徵構建樹節點。


11128682-098cad643eebfd25.png
image.png

對第j個特徵值小於s的劃分為左子樹,大於s的劃分為右子樹。CART樹實質是特徵維度進行劃分,而這種劃分優化是NP難問題,實際中常採用啟發式方法解決。當CART迴歸樹的目標函式採用平方誤差時,目標函式為


11128682-6c2ce7ece1d63618.png
image.png

因此,只要遍歷所有特徵的切分點,就可以找到最優的切分特徵和切分點。

2.梯度提升樹GBDT

採用加法模型與前向分佈演算法,以決策樹為基學習器,多個決策樹整合提升的方法。GBDT的一般模型:


11128682-7935b0e943455979.png
image.png

11128682-6620b64686375767.png
image.png

M為樹的個數,T表示決策樹。

  • GBDT選取特徵劃分節點的依據不再是熵、資訊增益或是Gini指標等純度指標,二十通過最小化每個節點的損失函式來進行每個節點處的分裂。
  • GBDT演算法採用平方誤差作為損失函式,每一棵迴歸書學習之前所有決策樹累加起來的殘差,擬合當前的殘差決策樹,使用加法模型,所有的樹共同決策。

訓練過程

使用前向分佈演算法:

11128682-0bfd75c9297983c6.png
image.png

給定第m-1棵樹的結果fm-1(x),求解第m棵樹的引數估計值:
11128682-491759b506c029f9.png
image.png

當採用平方誤差損失函式時,損失函式變為:
11128682-a94c151ee87743bf.png
image.png

其中r=y-fm-1(x)是當前模型擬合資料的殘差,因此,求解目標引數值即擬合殘差。

演算法流程

1.初始化決策樹,估計一個使損失函式最小化的常數構建一個只有根節點的樹。
2.不斷提升迭代:
a. 計算當前模型中損失函式的負梯度值,作為殘差的估計值;
b. 估計迴歸樹中葉子節點的區域,擬合殘差的近似值;
c. 利用線性搜尋估計葉子節點的區域的值,使損失函式極小化
d. 更新決策樹

  1. 經過若干輪的提升迭代,輸出最終模型

3.XGBoost

演算法思想

XGBoost裡,每棵樹是不斷加入,每加一棵樹希望效果能夠得到提升。實質上,每新增一棵樹其實是學習一個新函式去擬合上次預測的殘差,最後預測結果是每棵樹樣本所在的葉子節點的分數之和。

11128682-c8bd47f1eb497752.png
image.png

fk(xi)是第i個樣本在第k個決策樹上的預測分數。
11128682-15e816f2dbeaa06d.png
image.png

如圖所示,f(小孩)=2+0.9=2.9,f(老人)=-1-0.9=-1.9

訓練過程

XGBoost的目標函式:

11128682-0f4d9f2fd4c745e1.png
image.png

第一項是Training Loss,即預測值和真實值的差距,第二項是正則化項,防止模型的過擬合。正則化項有兩項:
11128682-9b920cf1e2f1404d.png
image.png

很明顯,我們的目標是尋找ft最小化目標漢薩胡,XGBoost使用ft在0處的二階泰勒展開式近似,最後簡化的目標函式為:
11128682-535a94ddcf660214.png
image.png

其中,gi和hi都是通過前一個樣本的梯度資料計算而來。

分裂節點

基於特徵空間分裂節點是一個NP難問題,因此XGBoost使用了貪婪演算法,遍歷所有特徵劃分點,使用目標函式值作為評價函式,同時為了限制樹的增長過深,還新增了閾值,只有當增益大於該閾值才進行分裂。

防止過擬合

此外,XGBoost為了防止過擬合提出了兩種方法。

  • 在每次迭代中給葉子節點的分數呈上一個縮減權重,使得每一棵樹的影響力不會太大,留下更大的空間給後面生成樹去優化模型
  • 按層進行特徵取樣,類似於隨機森林,選擇分裂特徵點時,隨機選擇部分特徵。

XGBoost的優點

1.防止過擬合
2.目標函式的優化使用了待求函式的二階導數
3.支援並行化,樹與樹之間雖然是序列的,但同層節點可以並行,訓練速度塊。
4.新增了對稀疏資料的處理。

XGBoost和隨機森林的區別

XGBoost是逐個新增樹,逐個提升,是一種Boosting演算法,每一次樹的新增必然會提升預測結果,最終得到最精確的預測結果。
隨機森林是隨機生成多個樹,多個樹共同進行決策,是一種Bagging演算法。

相關文章