在 Xgboost 那篇文章 (Kaggle 神器 xgboost) 中提到了 Gradient Boosted Decision Trees挪哄,今天來仔細(xì)看看 GBDT曾掂。
本文結(jié)構(gòu):
- 什么是 GBDT 占调?
- GBDT 與 Adaboost 的區(qū)別與聯(lián)系是什么 返帕?
- GBDT 與 Xgboost 的區(qū)別是什么甲棍?
什么是 GBDT泛源?
GBDT(Gradient Boosting Decision Tree拔妥,梯度提升決策樹),由名字可以看出涉及到三點(diǎn):
1. 首先是 Boosting:
前面寫過一篇 Adaboost 算法达箍,里面簡單介紹了 Boosting 的思想:
給定初始訓(xùn)練數(shù)據(jù)没龙,由此訓(xùn)練出第一個基學(xué)習(xí)器;
根據(jù)基學(xué)習(xí)器的表現(xiàn)對樣本進(jìn)行調(diào)整,在之前學(xué)習(xí)器做錯的樣本上投入更多關(guān)注硬纤;
用調(diào)整后的樣本解滓,訓(xùn)練下一個基學(xué)習(xí)器;
重復(fù)上述過程 T 次,將 T 個學(xué)習(xí)器加權(quán)結(jié)合。
簡單講蕾盯,就是每次訓(xùn)練單個弱學(xué)習(xí)器時悔橄,都將上一次分錯的數(shù)據(jù)權(quán)重提高一點(diǎn)再進(jìn)行當(dāng)前單個弱學(xué)習(xí)器的學(xué)習(xí)。這樣越往后執(zhí)行屑咳,訓(xùn)練出的單個弱學(xué)習(xí)器就會越在意那些容易分錯(權(quán)重高)的點(diǎn)。當(dāng)執(zhí)行 M 次后,通過加權(quán)求和的方式組合成一個最終的學(xué)習(xí)器缕减。
2. 接著是 Gradient Boosting:
Gradient boosting 是 boosting 的其中一種方法,它主要的思想是芒珠,每一次建立單個學(xué)習(xí)器時桥狡,是在之前建立的模型的損失函數(shù)的梯度下降方向。
我們知道損失函數(shù)(loss function)越大皱卓,說明模型越容易出錯裹芝,如果我們的模型能夠讓損失函數(shù)持續(xù)的下降,則說明我們的模型在不停的改進(jìn)娜汁,而最好的方式就是讓損失函數(shù)在其梯度(Gradient)的方向上下降嫂易。
接下來看算法具體細(xì)節(jié):
最終模型 F 是多個弱學(xué)習(xí)器的加權(quán)組合:
整體損失函數(shù),其中 P 為模型的參數(shù):
我們要求使損失函數(shù)達(dá)到最小的參數(shù):
或者寫成梯度下降的方式掐禁,就是我們將要得到的模型 fm 的參數(shù) {αm,βm} 能夠使得 fm 的方向是之前得到的模型 Fm-1 的損失函數(shù)下降最快的方向:
因為 Fm-1 的損失函數(shù)下降最快的方向為:
那我們可以用最小二乘法來得到 αm:
在此基礎(chǔ)上怜械,可以得到 βm:
最終得到整體:
完整算法:
3. 然后是 Decision Tree:
GBDT 是 GB 和 DT 的結(jié)合,就是當(dāng) GB 中的單個學(xué)習(xí)器為決策樹時的情況傅事,此處 DT 使用的是回歸樹缕允。
下面兩個圖分別表示 DT 和 由 100 棵樹組合成的 GB 在樹的深度為 0,3蹭越,6 時的效果障本,0 時就是要擬合的函數(shù)的圖像,可以看到 GB 可以在有限的深度就能得到比較光滑的的擬合:
既然都是 boosting 方法响鹃,那么 GBDT 與 Adaboost 的區(qū)別與聯(lián)系是什么驾霜?
它們都屬于 boosting 提升方法:
adaboost 可以表示為 boosting 的前向分布算法(Forward stagewise additive modeling)的一個特例。
在上圖中买置,如何選擇損失函數(shù)決定了算法的名字粪糙。不同的損失函數(shù)和極小化損失函數(shù)方法決定了 boosting 的最終效果,下面是幾個常見的 boosting:
AdaBoost 是通過提升錯分?jǐn)?shù)據(jù)點(diǎn)的權(quán)重來定位模型的不足忿项,
而 Gradient Boosting是通過算梯度(gradient)來定位模型的不足蓉冈。
GBDT 與 Xgboost 的關(guān)系又是什么脆栋?
在 Kaggle 神器 xgboost 這篇文章中簡單地提了一下 xgboost 的特點(diǎn),除了很多優(yōu)化外它與 GBDT 的區(qū)別有:
Xgboost 是 GB 算法的高效實現(xiàn)洒擦,xgboost 中的基學(xué)習(xí)器除了可以是CART(gbtree)也可以是線性分類器(gblinear)椿争。
-
xgboost在目標(biāo)函數(shù)中顯示的加上了正則化項:
-
GB 中使用 Loss Function 對 f(x) 的一階導(dǎo)數(shù)計算出偽殘差用于學(xué)習(xí)生成fm,xgboost 不僅使用到了一階導(dǎo)數(shù)熟嫩,還使用二階導(dǎo)數(shù):
-
CART 回歸樹中尋找最佳分割點(diǎn)的衡量標(biāo)準(zhǔn)是最小化均方差秦踪,xgboost 尋找分割點(diǎn)的標(biāo)準(zhǔn)是最大化,lamda掸茅,gama 與正則化項相關(guān):
參考:
統(tǒng)計學(xué)習(xí)方法
A Gradient Boosting Machine-Jerome H. Friedman
http://homes.cs.washington.edu/~tqchen/pdf/BoostedTree.pdf
http://blog.csdn.net/yangtrees/article/details/7506052
http://blog.csdn.net/shenxiaoming77/article/details/51542982
http://blog.csdn.net/dark_scope/article/details/24863289
http://arogozhnikov.github.io/2016/06/24/gradient_boosting_explained.html
推薦閱讀 歷史技術(shù)博文鏈接匯總
http://www.reibang.com/p/28f02bb59fe5
也許可以找到你想要的