集成學習-提升樹


boosting 提升方法實際采用的是加法模型和前向分步算法   【之前在講 Adaboost 時,講過這兩個算法,參考我的博客

 

提升樹 boosting tree

以決策樹為基學習器的提升方法稱為提升樹,提升樹可以解決分類和回歸問題,分類問題以分類樹為基學習器,回歸問題以回歸樹為基學習器,決策樹均為二叉樹

提升樹模型可以表示為

M為決策樹個數,T(x, θ) 為決策樹模型, θ為決策樹參數

 

提升樹算法采用前向分步算法,初始提升樹 f0(x)=0,第m步提升樹

fm-1(x) 是當前模型,相當於是個已知數,模型誤差可以表示為

由於 fm-1(x) 是個常數,y也是常數,最小化誤差就是求 T(x, θ) 中的 最優θ,也就是只求第 m 步的最佳模型,所以是一種貪心算法

 

不同類型的提升樹有不同的損失函數,回歸問題就是均方誤差,分類問題為指數損失函數

 當yy相同時,損失函數趨近於0

 

回歸提升樹

由於分類樹比較常見,所以這里主要講回歸問題。

 

回歸樹

假設數據樣本為

,x為輸入空間,輸入空間為實數域, 【回歸問題中 x 一般為連續值,處理方式類似於決策樹處理連續值】

將 x 划分成 J 個互不相交的區域,R1、R2、R3...RJ,每個區域的輸出為 cj,決策樹可表示為

 

具體理解如圖

可以看到 J 就是葉節點的個數,也表示了決策樹的復雜度,只分裂一次的樹稱為 樹樁

 

回歸提升樹

依然采用前向分步算法

1. 初始提升樹 f0(x)=0

2. 第 m 步訓練決策樹 T(x, θ),得到該步的提升樹

需要最優化 θ

 

回歸問題損失函數為 均方差

r 就是當前模型的殘差,所以 提升樹 只需學習當前模型的殘差,這使得算法變得簡單

3. 輸出組合模型

 

回歸提升樹算法總結

輸入:

輸出:

1)初始提升樹 f0(x)=0

2)對 m = 1,2,3...M

3)計算殘差  r= yi - fm-1(x)

4)擬合fm-1的殘差 r 學習一個回歸樹 T(x, θ)    【注意,每步要更新 f(x),f(x)是前n步的和,而不是計算單步的殘差,損失

5)更新

6)輸出回歸提升樹

 

實例

x 1 2 3 4 5 6 7 8 9 10
y 5.56 5.70 5.91 6.40 6.80 7.05 8.90 8.70 9.00 9.05

 

 

 

 

以樹樁作為基學習器。

1. 求 T1(x) ====> 將樣本集按x分成2分,分別求平均即可,那如何分呢?

目標函數為 

 當 x 屬於 R1時,y_predict = c1,誤差 y-c1,同理,最終得到上面的損失函數,當損失函數最小時,其對應的划分方式就是最佳划分方式。

 

下面就是按決策樹處理連續值的方式

划分點s為 [1.5  2.5  3.5  4.5  5.5  6.5  7.5  8.5  9.5]

R1 = {x|x<s};R2={x|x>s}

對葉子結點求平均即可求得 c1,c2

經計算,當 s = 1.5 時,c1 = 5.56,c2 = 7.50,

同理可得到所有划分的損失

s 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5  
m(s) 15.72 12.07 8.36 5.78 3.91 1.93 8.01 11.73 15.74  

 

 

 

 

可見,當 s = 6.5 時,損失最小,為1.93,此時 c1 = 6.24,c2 = 8.91,回歸樹為

 

當前殘差

x 1 2 3 4 5 6 7 8 9 10
y -0.68 -0.54 -0.33 0.16 0.56 0.81 -0.01 -0.21 0.09

0.14

 

 

 

 

當前損失

 

第一步只是個弱學習器,可見效果不怎么地

 

2. 求 T2(x) ====> 此時只需學習  T1(x) 的殘差

方法同第一步,回歸樹為

 

當前損失

注意損失是 f2(x) 的損失,殘差也是  f2(x) 的殘差,而不是 T2(x) 的損失,所以先計算 f2(x)

 損失為 0.79,比1.93要小。

 

3. 繼續求 Tm(x) ====> 此時只需學習  fm-1(x) 的殘差

比如學習 6 個回歸樹,則最終模型為

 損失為 0.17,比之前要小很多。

 

現在我們需要考慮幾個問題

1. 上述基學習器 只是 一層,如果是2層、3層,那么基學習器如何表示?會相當麻煩

2. 多層的基學習器又如何相加呢?更麻煩

3. 提升樹的基學習器通過最小化均方差來學習,如果損失函數不是 均方差,又如何?

為了解決上述問題,有人提出了改進算法。

 

梯度提升樹 GBDT

GBDT 也可以解決回歸和分類問題,有些地方把 回歸 GBDT 叫做 GBRT。

GBDT 損失函數可以有多種,在 sklearn 中,回歸問題損失函數有4種:ls 平方損失,lad 絕對損失,huber huber損失,quantile:分位數損失,分類問題損失函數有2種:exponential 指數損失,deviance 對數損失

 

GBDT 利用梯度下降的近似方法,其 關鍵是利用 損失函數的負梯度 在當前模型的值 作為 回歸提升樹中殘差的近似

第 m 輪第 i 個樣本的損失函數的負梯度,得到 (xi,rmi) 作為新數據,擬合一個回歸樹

 

具體算法如下

輸入:,損失函數 L(y,f(x))

輸出:回歸樹組合模型F(x)

1)初始化提升樹 ====> 估計一個使得損失函數最小的常數c,他只有根節點,如果loss是mes,一般取均值,如果loss是絕對損失,一般取中位數

2)for m = 1,2...M  ====> 訓練M個基學習器

3)for i = 1,2...N ====> 遍歷N個樣本,計算殘差  【為什么帶負號,因為f(x)是自變量,在損失函數中它前面有個減號,求導時相當於復合函數,得乘以-1,前面帶個負號,剛好和這個-1抵消,r=y-f(x)】

4)擬合一棵cart樹,對x進行划分,建立決策樹,得到第m棵樹的葉節點區域 Rmj,j=1,2..J (j表示葉節點的個數)

5)for j=1,2...J ====> 遍歷 J 個葉節點,利用線性搜索,估計每個葉節點的值,使得損失函數最小化  

c=βf(x),決策樹只是輸出了 f(x),但是 β 是多少,需要根據 min loss 求解,最終把 c 作為葉子結點的輸出

6)更新模型

7)輸出回歸樹

 

實例

數據如下:5個樣本,4個訓練,1個測試,特征為年齡、體重,標簽為身高

編號 年齡(歲) 體重(kg) 身高(m)(標簽值)
0 5 20 1.1
1 7 30 1.3
2 21 70 1.7
3 30 60 1.8
4 25 65 預測

 

 

 

 

 

 

 

 

 

參數設置

迭代次數:n_trees = 5

樹的深度:max_depth = 3

學習率:lr = 0.1

損失函數:mes

 

1. 初始化提升樹 ,loss為mes,取均值即可  f0(x) = 1.475

也可以正規求,估計一個使得損失函數最小的常數,loss = Σ(y_true - y_pred)2,要最小,求導,Σ(y_true - y_pred)=Σy_true - Σy_pred=Σy_true - Ny_pred

令導數等於0,y_pred = Σy_true / N,即均值

2. 計算  f0(x) 的近似殘差

編號 真實值 f0(x) 殘差
0 1.1 1.475 -0.375
1 1.3 1.475 -0.175
2 1.7 1.475 0.225
3 1.8 1.475 0.325

 

 

 

 

 

 

 

此時殘差變成了真實的標簽

3. 基於特征的划分

划分點 小於划分點的樣本 大於等於划分點的樣本 SSElSSSEl SErSEr SEsumSEsum
年齡5 / 0,1,2,3 0 0.327 0.327
年齡7 0 1,2,3 0 0.140 0.140
年齡21 0,1 2,3 0.020 0.005 0.025
年齡30 0,1,2 3 0.187 0 0.187
體重20 / 0,1,2,3 0 0.327 0.327
體重30 0 1,2,3 0 0.140 0.140
體重60 0,1 2,3 0.020 0.005 0.025
體重70 0,1,3 2 0.260 0 0.260




 

 

 

 

 

 

 

 

 

 

損失函數是mes,我們這里簡單計算每個葉節點的平方和損失,上圖第4列是左節點的損失,第5列是右節點的損失,以年齡7為例,右節點損失計算如下

誤差最小為0.025,有兩種划分方式,隨便選一種,年齡21,做如下划分

 max_depth 為3,還需繼續划分,同理可得

 

4)計算葉節點的值        【關鍵點】

遍歷葉節點,線性搜索,計算節點值,使得損失函數最小

r 其實就是基學習器,f0(x) 是之前基學習的和,f0(x)+r 就是本次預測,yi為真實值,最初的真實值

相當於給節點找一個參數r,使得損失函數最小,方法是求導,令導數等於0,計算可得

 

r11 = -0.375,r12 = -0.175,r21 = 0.225,r22 = 0.325

 

5)更新模型

6)重復上述步驟即可

 

 

注意

1. 提升樹的基學習器只能是 cart 樹

2. 加法模型可以帶學習率,放慢學習速度,防止過擬合

 

 

 

參考資料:

《統計學習方法》  李航    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM