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. 加法模型可以帶學習率,放慢學習速度,防止過擬合
參考資料:
《統計學習方法》 李航