1、優化模型的兩種策略:
1)基於殘差的方法
殘差其實就是真實值和預測值之間的差值,在學習的過程中,首先學習一顆回歸樹,然后將“真實值-預測值”得到殘差,再把殘差作為一個學習目標,學習下一棵回歸樹,依次類推,直到殘差小於某個接近0的閥值或回歸樹數目達到某一閥值。其核心思想是每輪通過擬合殘差來降低損失函數。
總的來說,第一棵樹是正常的,之后所有的樹的決策全是由殘差來決定。
2)使用梯度下降算法減小損失函數。
對於一般損失函數,為了使其取得最小值,通過梯度下降算法,每次朝着損失函數的負梯度方向逐步移動,最終使得損失函數極小的方法(此方法要求損失函數可導)。
2、GB(Gradient Boosting)梯度提升算法
GB其實是一個算法框架,即可以將已有的分類或回歸算法放入其中,得到一個性能很強大的算法。
GB總共需要進行M次迭代,每次迭代產生一個模型,我們需要讓每次迭代生成的模型對訓練集的損失函數最小,而如何讓損失函數越來越小呢?我們采用梯度下降的方法,在每次迭代時通過向損失函數的負梯度方向移動來使得損失函數越來越小,這樣我們就可以得到越來越精確的模型。
梯度提升算法(GB)過程如下:[1]
1)初始化損失函數。
2)對於第m輪迭代,當m<=M時循環執行A)~D) (m=1,2,…,M)
A)計算殘差rmi:
計算損失函數的負梯度在當前模型的值,將它作為殘差的估計,對於平方損失函數它就是殘差,對於一般損失函數,它就是殘差的近似值。
B)對rmi擬合一顆回歸樹,得到第m課樹的葉節點區域Rmj。(j=1,2,…,J)
(估計回歸樹葉節點區域,擬合殘差近似值)
C)對j=1,2,…,J,線性搜索出損失函數的最小值
D)更新f(x)
3)得到回歸樹
下面給出Friedman大牛論文中的GB算法[6],論文下載鏈接:http://pan.baidu.com/s/1pJxc1ZH
圖2.1 Gradient Boost算法[6]
3、GBDT (Gradient Boosting Decision Tree):梯度提升決策樹算法
此處主要討論多類Logistic回歸問題
圖3.1 多類logistic回歸算法[6]
關於以上代碼,網友已有分析:[5] (在此借用)
“1. 表示建立M棵決策樹(迭代M次)
2. 表示對函數估計值F(x)進行Logistic變換
3. 表示對於K個分類進行下面的操作(其實這個for循環也可以理解為向量的操作,每一個樣本點xi都對應了K種可能的分類yi,所以yi, F(xi), p(xi)都是一個K維的向量,這樣或許容易理解一點)
4. 表示求得殘差減少的梯度方向
5. 表示根據每一個樣本點x,與其殘差減少的梯度方向,得到一棵由J個葉子節點組成的決策樹
6. 為當決策樹建立完成后,通過這個公式,可以得到每一個葉子節點的增益(這個增益在預測的時候用的)
每個增益的組成其實也是一個K維的向量,表示如果在決策樹預測的過程中,如果某一個樣本點掉入了這個葉子節點,則其對應的K個分類的值是多少。
7. 的意思為,將當前得到的決策樹與之前的那些決策樹合並起來,作為新的一個模型
”
最后本人對GBDT研究得還不夠透徹,下次研究清楚了再專門寫一篇GBDT的文章!!
參考文獻:
[1] 李航,統計學習方法。
[2] 林軒田,機器學習技法。
[3] 程序員之家,http://www.programerhome.com/?p=3665
[4] DianaCody, http://www.dianacody.com/2014/11/01/GBRT.html
[5] leftnoteasy, http://www.cnblogs.com/leftnoteasy/archive/2011/03/07/random-forest-and-gbdt.html
[6] Friedman J H. Greedy Function Approximation: A Gradient Boosting Machine[C]// Annals of Statistics1999:1189--1232.