gradient boosted regression tree
這個算法出自Greedy function Approximation – A Gradient Boosting Machine
作者實在是有夠抽象,一個不復雜的算法讓他講的那么復雜
本人也參考了這篇博客
http://www.cnblogs.com/LeftNotEasy/archive/2011/01/02/machine-learning-boosting-and-gradient-boosting.html
但是,最終讓我基本明白這個算法還是看了這篇論文 web-search ranking with initialized gradient boosted regression trees
1. 首先講下decision tree, 按照書上的算法是通過信息增益進行結點的分割和建樹,這里我們是通過
建樹
2. 再講下random forest.RF與boosted trees沒有多大關系。RF就是每次隨機選擇實例,并隨機選擇k個特征進行建樹,決策的過程就是對所有樹輸出的結果的平均。
優點就是不會有過擬合。
這里說的不錯:http://www.cnblogs.com/LeftNotEasy/archive/2011/03/07/random-forest-and-gbdt.html
按這種算法得到的隨機森林中的每一棵都是很弱的,但是大家組合起來就很厲害了。我覺得可以這樣比喻隨機森林算法:每一棵決策樹就是一個精通于某一個窄領域的專家(因為我們從M個feature中選擇m讓每一棵決策樹進行學習),這樣在隨機森林中就有了很多個精通不同領域的專家,對一個新的問題(新的輸入數據),可以用不同的角度去看待它,最終由各個專家,投票得到結果。
3. ?gradient boosted trees
和rf類似,也是建立多顆樹,并且決策的過程也是所有樹輸出結果的平均
但是當前樹的建立是基于前面所有樹的建立的。
每一次建立模型是在之前建立模型損失函數的梯度下降方向。這句話有一點拗口,損失函數(loss function)描述的是模型的不靠譜程度,損失函數越大,則說明模型越容易出錯(其實這里有一個方差、偏差均衡的問題,但是這里就假設損失函數越大,模型越容易出錯)。如果我們的模型能夠讓損失函數持續的下降,則說明我們的模型在不停的改進,而最好的方式就是讓損失函數在其梯度(Gradient)的方向上下降。
首先,前m-1個模型是
其損失函數的梯度是:
那么下一個模型m,注意,就是要等于這個梯度,使得前m個模型相加的損失函數最小
對于g的系數,完全可以不管,影響不大
讓r = g
那么就可以建立一顆樹,
所以,gradient tree的裝B算法可以這樣描述:
其實,算法很簡單,就是
注意其中,r = r- aT,r就是梯度
然后在下一輪的迭代中,就是根據梯度r來建樹
總結
以上是生活随笔為你收集整理的gradient boosted regression tree的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编译boost相关文件
- 下一篇: java的类型转换