提升樹是以決策樹為基分類器的提升方法,通常使用CART樹。針對不同問題的提升樹學習算法,主要區別在於使用的損失函數不同。
1)分類問題:指數損失函數。可以使用CART分類樹作為AdaBoost的基分類器,此時為分類提升樹。
2)回歸問題:平方誤差損失函數。
3)決策問題:一般損失函數。
1、提升樹算法
提升樹采用線性模型+前向分步算法+CART樹(基函數)。提升樹的加法模型可表示為:
(此時樹前面並沒有權重!!下面有分析)
1)基函數是分類樹(二叉分類樹)
對於基函數是分類樹時,我們使用指數損失函數,此時正是AdaBoost算法的特殊情況,即將AdaBoost算法中的基分類器使用分類樹即可。
2)基函數是回歸樹
若基函數是回歸樹,則使用平方誤差損失函數。
我們將回歸樹的輸入空間划分為R1,R2,…,RJ個區域,每個區域的輸出分別為:Cj,則回歸樹可以表示為:
前向分步算法第m步的得到的模型為:
平方誤差損失函數為:
設:,rm即為當前模型擬合數據的殘差。對回歸問題的提升樹算法來說,只需簡單地擬合當前模型的殘差。
因為需要用到上一步的分類器,故而在每輪都需要計算殘差,然后遍歷可能的切分點,找出平方損失函數最小的切分點將輸入划分為兩個子集,然后依次類推,直到不能繼續划分。
算法過程:
訓練集為:T={(x1,y1),(x2,y2),…,(xn,yn)}。
1)初始化:f0(x)=0
2)下面共進行M輪的迭代,對於第m輪的迭代過程如下:(m=1,2,…,M)
A)遍歷每個特征的每個可能取值,計算殘差:
B)對於特征的每個可能取值,選擇平方損失函數最小的切分點,得到樹
。
C)更新
3)最終得到回歸問題提升樹:
在上面的算法中,並沒有在每個基分類器前面加上權值,此算法通過每次減小殘差的方式來減小每輪所產生的模型的損失函數,通過這種方式,逐步減小殘差值來使得損失函數減小,這樣的話最初的模型的損失函數應該最大,那么在最終的線性組合中應該減小它的權重,但是上述算法並沒有這樣做,而是將每輪產生的模型通過均值或投票的方式來產生最終的結果??
其實,在每輪的迭代過程中生成的 並不是一個獨立的分類器,它只是對殘差的擬合,只有將它添加到前一輪的累加模型中才會對訓練集有好的分類或回歸效果。
3、損失函數最小化方法
對於最開始提到的三種損失函數,其最小化方法各有不同。當損失函數為下面幾種函數時,最小化損失函數的方法如下:
1)指數函數
當損失函數為指數函數時,比如AdaBoost算法的損失函數是指數函數,這時通過前向分步算法來解決。
前向分布算法在每輪迭代時,通過將上一輪所生成的模型所產生的損失函數最小化的方法來計算當前模型的參數。
2)平方誤差損失函數
在回歸樹提升算法中,遍歷當前輸入樣例的可能取值,將每種可能值計算一遍損失函數,最終選擇損失函數最小的值。(很原始)
在計算平方損失誤差時,可能出現殘差項(y-fm-1(x)),此時可以通過如下方法來進行優化:每一輪迭代是為了減小上一步模型的殘差,為了減少殘差,每次在殘差的負梯度方向建立一個新的模型,這樣一步一步的使得殘差越來越小。
3)一般損失函數
對於一般損失函數,可以通過梯度下降的方法來使得損失函數逐步減小,每次向損失函數的負梯度方向移動,直到損失函數值到達谷底。
參考文獻:
[1] 李航,統計學習方法。
[2] 林軒田,機器學習技法(coursera)。
[3] leftnoteasy, http://www.cnblogs.com/LeftNotEasy/archive/2011/03/07/1976562.html
[4] w28971023, http://blog.csdn.net/w28971023/article/details/43704775