迴歸問題提升樹
網上已經有很多介紹Boosting的資料了,這裡簡單概述一下Boosting。
Boosting是一種ensemble的學習方法。通過反覆學習多個弱學習器,然後使用加法模型將弱學習器組合到一起形成一個強學習器。如果每次學習一個弱分類器都用同樣的資料,顯然是學習多少次都是沒有太大意義。所以,大多數Boosting每一輪訓練一個弱學習器時就會改變樣本的概率分佈,也就是每個樣本的權重。然後下一個弱學習器就會學到不同分佈的樣本。
接著我們來看一下什麼是加法模型:
加法模型為一系列模型的線性相加:
其中,為基學習器,為基學習器的引數,為基學習器的係數,也可以理解為每個基學習的權重。
所以在給定訓練資料及損失函式的情況下,學習一個加法模型f(x)就成為經驗風險極小化,即cost function極小化問題:
因為加法模型要同時優化所有的基學習器是一個很複雜的問題,為了make life easier,同時結合加法模型的特性(基學習器的線組合),我們可以採用前向分佈演算法,每次優化新加入的基學習器的引數, 因為前面已經變為常數了,逐步逼近優化上面的cost function。
前向分佈演算法
輸入:訓練資料集, ; 損失函式;基函式集為;
輸出:加法模型f(x)
1) 初始化
2) 對m=1,2,3,...,M, 依次訓練第m個基學習器
a) 極小化損失函式
得到引數;
b) 更新
3) 得到加法模型
有了上面的鋪墊,我們可以開始迴歸問題提升樹了。
迴歸提升樹是採用CART迴歸樹作為基學習器的Boosting演算法。它會訓練多棵CART樹,然後每棵樹的預測結果的線性組合就是迴歸問題提升樹。
迴歸提升樹演算法:
輸入:訓練資料集, ;
損失函式為平方誤差損失函式(MSE) :
輸出:提升樹
1) 初始化;
2) 對m=1,2,3,...,M, 依次訓練第m個CART迴歸樹
a) 計算殘差
b) 擬合殘差學習一個迴歸樹,得到
為迴歸樹在輸入空間劃分的J個區域j = 1,2,...,J,也就是葉子結點的個數。所以就表示每個結點也就是區域輸出的常 量 。引數,表示樹的區域劃分和各區域上的常數。
c) 更新
3) 得到迴歸問題提升樹
在《統計學習演算法》書上p149頁給出了一個具體的迴歸問題提升樹的例項,大家可以去看一下。
接下來講一下為什麼下一棵樹擬合的是當前模型的殘差,不是應該擬合原始資料,然後最小化損失函式嗎?
因為迴歸問題提升樹是加法模型,在使用前向分佈演算法擬合數據時,我可以把前幾步具體寫出來:
此時要最小化損失函式得到下一顆樹的引數
因為使用的是平方誤差損失函式,所以就有:
而正是當前模型的殘差, 就可以得到:
因為迴歸樹的損失函式也是MSE,所以 正好是迴歸樹的損失函式,只是說 r 就充當了原本 y 的位置,所以下一棵樹擬合的是當前模型的殘差。也就是擬合數據集
迴歸問題提升樹和GBDT也有聯絡。首先,都用的是CART迴歸樹;其次,因為GBDT下一棵樹擬合的是損失函式在當前模型的負梯度,而回歸問題提升樹的損失函式為MSE,而該損失函式的梯度就是殘差。所以迴歸問題提升樹可以看做是損失函式為MSE的GBDT.
GBDT的解釋請看下一篇。
參考書籍:李航《統計學習方法》