Gradient Boosted Decision Trees详解
感受
GBDT集成方法的一種,就是根據每次剩余的殘差,即損失函數的值。在殘差減少的方向上建立一個新的模型的方法,直到達到一定擬合精度后停止。我找了一個相關的例子來幫助理解。本文結合了多篇博客和書,試圖完整介紹GBDT的內容,歡迎大家來指正。
介紹
GBDT是一個應用很廣泛的算法,可以用來做分類、回歸。GBDT這個算法還有其它名字,如MART(Multiple AdditiveRegression Tree),GBRT(Gradient Boost Regression Tree),TreeNet等等。Gradient Boost其實是一個框架,里面可以套入很多不同的算法。
原始的Boost算法是在算法開始的時候,為每一個樣本賦上一個權重值,初始的時候,大家都是一樣重要的。在每一步訓練中得到的模型,會使得數據點的估計有對有錯,我們就在每一步結束后,增加分錯的點的權重,減少分對點的權重,這樣使得某些點如果老師被分錯,那么就會被“嚴重關注”,也就被賦上一個很高的權重。然后等進行了N次迭代(由用戶指定),將得到N個簡單的分類器(basic learner),然后我們將它們組合起來(比如說可以對它們進行加權、或者讓它們進行投票等),得到一個最終的模型。
Gradient Boost與傳統的Boost的區別是,每一次的計算是為了減少上一次的殘差(residual),而為了消除殘差,我們可以在殘差減少的梯度方向上建立一個新的模型。所以說,在Gradient Boost中,每個新模型的建立是為了使得之前模型的殘差梯度方向減少,對傳統Boost對正確,錯誤的樣本進行加權有很大的區別。
在GBDT的迭代中,假設我們前一輪迭代得到的強學習器是ft-1(x),損失函數是L(yi,ft-1(x)),我們本輪迭代的目標是找到一個CART回歸樹模型的弱學習器ht(x),讓本輪的損失L(yi,ft(x)=L(yi,ft-1(x))+ht(x)最小。也就是說,本輪迭代找到決策樹,要讓樣本的損失盡量變得更小。
GBDT的思想用一個通俗的例子解釋,加入有個人30歲,我們首先用20歲去擬合,發現損失有10歲,這時我們用6歲去擬合剩下的損失,發現差距還有4歲,第三輪我們用3歲擬合剩下的差距,差距就只有1歲了。如果我們的迭代輪數還沒有完,可以繼續往下迭代,每一輪迭代,擬合的歲數誤差都會減小。
上圖為一個GBDT的例子,表示預測一個人是否喜歡電腦游戲。
GBDT梯度提升決策樹算法是在決策樹的基礎上引入GB(逐步提升)和shrinkage(小幅縮進)兩種思想,從而提升普通決策樹的泛化能力。核心點在于GBDT的結果是多顆決策樹預測值的累加,而殘差則是每棵決策樹的學習目標。GBDT是回歸樹而不是分類樹,調整后可用于分類。
從上面的例子看這個思想還是蠻簡單的,但是有個問題是這個損失的擬合不好度量,損失函數各種各樣,怎么找到一種通用的擬合方法呢?
概念
GBDT的負梯度擬合
針對損失函數擬合方法的問題,大牛Fredman提出了用損失函數的負梯度來擬合本輪損失的近似值,進而擬合一個CART回歸樹。第t輪的第i個樣本的損失函數的負梯度表示為:
利用(xi,rti)(i=1,2,…,m),我們可以擬合一個CART回歸樹,得到了第t個回歸樹,其對應的葉結點區域Rtj,j=1,2,…,J.其中J為葉子結點的個數。
針對每一個葉子結點里的樣本,我們求出使損失函數最小,也就是擬合葉子結點最好的輸出值cij如下:
這樣我們就得到了本輪的決策樹擬合函數如下:
從而本輪最終得到的強學習器的表達式如下:
通過損失函數的負梯度來擬合,我們找到了一種通用的擬合損失誤差的辦法,這樣無論是分裂問題還是回歸問題,我們通過其損失函數的負梯度的擬合,就可以用GBDT來解決我們的分類回歸問題,區別僅僅在于損失函數不同導致的負梯度不同而已。
決策樹
決策樹時一個類似于流程圖的結構,每個內部結點代表一個屬性的測試,每個分支代表測試的結果,每個葉子結點代表分類的結果。從根結點到葉子結點代表分類的規則。
詳細了解的話可以參考我的博客http://blog.csdn.net/w5688414/article/details/77920930
上圖是一個決策樹的例子。
信息熵:
樣本集為D,Pk(k=1,2,…,Y)代表樣本集D中第k個樣本的比例。決策樹就是每次選擇一個屬性劃分使得Ent(D)最小。
決策樹有很多算法,ID3,CART的區別是所選擇的劃分標準不一樣,ID3選擇的是信息增益,當CART是分類樹時,采用GINI值作為節點分裂的依據;當CART是回歸樹時,采用樣本的最小方差作為節點分裂的依據;。
分裂特征為a’,值為v’.DL是樣本val(x,a’)<=v’ 的集合.DR是樣本val(x,a’)>v’的集合.D=DL∪DR。
選擇分裂點的依據:
對于決策樹模型,分類和回歸的損失函數可以用戶自定義,通常,掃描所有分裂點的代價很大,所以有一些近似算法(這個自行百度了),為了避免過擬合,常用的方法是后剪枝。
集成學習
集成方法就是使用多種學習算法去獲得更好的預測性能的方法,典型的集成方法有很多,如AdaBoost,隨機森林(Random Forest),GBDT。前面的兩種算法不是本文講的內容,本文主要解析一下GBDT算法。
損失函數
算法
回歸算法
當GBDT用于回歸時,常用的損失函數包括平方損失函數、絕對值損失函數、Huber損失函數。每次朝著損失函數的負梯度方向移動即可取得損失函數的最小值。
輸入:訓練樣本T={(x1,y1),(x2,y2),…,(xm,ym) },最大迭代次數是T,損失函樹為L.
輸出:強學習器f(x)
1)?????初始化弱分類器
2)?????對迭代輪數t=1,2,…,T有:
a)?????對樣本i=1,2,…,m,計算負梯度:
??????
b)?????利用(xi,rti)(i=1,2,…,m),擬合一個CART回歸樹,得到第t顆回歸樹,其對應的葉子結點區域為Rtj,j=1,2,…,J. 其中J為回歸樹t的葉子結點的個數。
c)?????對葉子區域j=1,2,…,J.計算最佳擬合值
????????d)?????更新強學習器
???????
3)得到強學習器f(x)的表達式
分類算法
當GBDT用于分類時,常用的損失函數有對數損失函數、指數損失函數等。這種損失函數的目的是求預測值為真實值的概率。
二元分類
對于二元GBDT,如果用類似于邏輯回歸的對數似然損失函數,其損失函數為:
其中y∈{-1,+1},則此時的負梯度誤差為
對于生成的決策樹,我們各個葉子結點的最佳殘差擬合值為
由于上式比較難優化,我們一般使用近似值代替:
除了負梯度計算和葉子結點的最佳殘差擬合的線性搜索,二元GBDT回歸算法和GBDT回歸算法過程相同。
多元分類
多元GBDT比二元GBDT復雜一些,對應的是多元邏輯回歸和二元邏輯回歸。假設類別為K,則此時我們的對數似然損失函數為:
其中如果樣本輸出類別為K,則yk=1。第k類的概率pk(x)的表達式為:
集合兩式,我們可以計算出第i個樣本對應類別l的負梯度誤差為
(分母多了個括號)
觀察上式可以看出,其實這里的誤差就是樣本i對應的類別l的真實概率和t-1輪預測概率的差值。
對于生成的決策樹,我們各個葉子結點的最佳殘差擬合值為
由于上式比較難優化,我們一般使用近似值代替
除了負梯度計算和葉子結點的最佳殘差擬合的線性搜索,多元GBDT分類和二元GBDT分類以及回歸算法過程相似。
GBDT優缺點
優點
1) 可以靈活處理各種類型的數據,包括連續值和離散值。
2) 在相對少的調參時間情況下,預測的準確率也可以比較高。這個是相對SVM來說的。
3)使用一些健壯的損失函數,對異常值的魯棒性非常強。比如 Huber損失函數(huber詳細見本文的損失函數模塊)和Quantile損失函數。
缺點
1) 由于弱學習器之間存在依賴關系,難以并行訓練數據。不過可以通過自采樣的SGBT(Stochastic Gradient Boosting Tree)來達到部分并行。
例子
這個例子不是一個典型的GBDT的例子,沒有用到負梯度求解,但是過程和GBDT一樣,并且有明確的計算過程,可以幫助理解GBDT的過程,值得借鑒。實際問題比這個簡單的例子復雜得多。
已知如表8.2所示的訓練數據,x的取值范圍為區間[0.5,10.5],y的取值范圍為區間[5.0,10.0],學習這個回歸問題的boosted tree模型,考慮只用樹樁作為基本函數。損失函數是誤差的平方和。
按照算法,第1步求f1(x)即回歸樹T1(x)。
首先通過以下優化問題:
求解訓練數據的切分點s:
容易求得在R1,R2內部使平方損失誤差達到最小值的c1,c2為
這里N1,N2是R1,R2的樣本點數。
現將s及m(x)的計算結果列表如下:
用f1(x)擬合訓練數據的殘差見表8.4,表中r2i=yi-f1(xi),i=1,2,…,10
用f1(x)擬合訓練數據的平方損失誤差:
第2步求T2(x)。方法與求T1(x)一樣,只是擬合的數據表8.4的殘差??梢缘玫?#xff1a;
用f2(x)擬合訓練數據的平方損失誤差是
繼續求得
用f6(x)擬合訓練數據的平方損失誤差是
假設此時已滿足誤差要求,那么f(x)=f6(x)即為所求提升樹。讀者可以手算一下,計算量還是有點大,畢竟有那么多求和和求均值,還有平方和。
參考文獻
[1]. Gradient boosting. https://en.wikipedia.org/wiki/Gradient_boosting
[2]. 梯度提升樹(GBDT)原理小結
[3]. 決策樹系列(五)——CART
[4] GBDT(Gradient Boosting Decision Tree) 沒有實現只有原理
[5].李航.《統計機器學習》?
?
總結
以上是生活随笔為你收集整理的Gradient Boosted Decision Trees详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spark MLlib: Decisio
- 下一篇: spark.mllib源码阅读:Grad