gbdt(gradient boosting decision tree)
又叫mart
(multiple additive regression tree)
,是一種用於回歸的機器學習演算法,該演算法由多棵決策樹組成,所有樹的結論累加起來做最終答案。當把目標函式做變換後,該演算法亦可用於分類或排序。
本文主要從高層明確幾個gbdt概念,主要講
gbdt
的兩個版本以及
gbdt
是什麼不是什麼。
詳細介紹較長,見另一篇博文
1. gbdt的兩個不同版本(重要)
目前gbdt
有兩個不同的描述版本,兩者各有支持者,讀文獻時要注意區分。
殘差版本把
gbdt
說成乙個殘差迭代樹,認為每一棵回歸樹都在學習前
n-1棵樹的殘差,之前我寫的
gbdt
入門教程
主要在描述這一版本,
elf開源軟體
實現中用的也是這一版本。
gradient版本把
gbdt
說成乙個梯度迭代樹,使用梯度下降法求解,認為每一棵回歸樹在學習前
n-1棵樹的梯度下降值,之前
leftnoteasy
的部落格中
介紹的為此版本,
umass
的原始碼實現中用的則是這一版本(準確的說是
lambdamart
中的mart
為這一版本,
mart
實現則是前一版本)。
對gbdt
無基礎的朋友可以先分別看一下前面兩篇博文教程。總的來說
兩者相同之處在於,都是迭代
回歸樹,都是
累加每顆樹結果作為最終結果(
multiple additive regression tree)
,每棵樹都在學習前
n-1棵樹尚存的不足,從總體流程和輸入輸出上兩者是沒有區別的;
兩者的不同主要在於每步迭代時,是否使用
gradient
作為求解方法。前者不用
gradient
而是用殘差
----
殘差是全域性最優值,
gradient
是區域性最優方向
*步長,即前者每一步都在試圖讓結果變成最好,後者則每步試圖讓結果更好一點。
兩者優缺點。看起來前者更科學一點
--有絕對最優方向不學,為什麼捨近求遠去估計乙個區域性最優方向呢?原因在於靈活性。前者最大問題是,由於它依賴殘差,
cost function
一般固定為反映殘差的均方差,因此很難處理純回歸問題之外的問題。而後者求解方法為梯度下降,只要可求導的
cost function
都可以使用,所以用於排序的
lambdamart
就是用的後者。
2. gbdt中的tree是回歸樹,不是分類決策樹。
詳見之前我寫的
gbdt
入門教程
3. gbdt中的boost是樣本目標的迭代,不是re-sampling的迭代,也不是adaboost。
adaboost
中的boosting
指從樣本中按分類對錯,分配不同的
weight
,計算cost function
時使用這些
weight
,從而讓「錯分的樣本權重越來越大,直到它們被分對」。
bootstrap
也有類似思想,只不過它可以利用不同的
weight
作為sample
概率對訓練樣本集做
re-sample
,讓錯分的樣本被進一步學習,而分類正確的樣本就不用再學了。但
gbdt
中的boost
完全不同,跟上述邏輯沒有任何關係,
gbdt
中每步boost
的樣本集都是不變的,變的是每個樣本的回歸目標值。詳見之前我寫的
gbdt
入門教程。
4. shrinkage不是gradient的步長
shrinkage
只是一種大步變小步的逐步求精方法。這點看起來和
gradient
目標=gradient
單位方向
*步長挺像。
但其實很不同:1)
shrinkage
的處理物件不一定是
gradient
方向,也可以是殘差,可以是任何增量,即目標
=任何東西
*shrinkage
步長。2
)shrinkage
決定的是最終走出的一步大小,而不是希望走出的一步大小。前者是對於已有的學習結果打折,後者是在決定學習目標時對區域性最優方向上走多遠負責。3)
shrinkage
設小了只會讓學習更慢,設大了就等於沒設,它適用於所有增量迭代求解問題;而
gradient
的步長設小了容易陷入區域性最優點,設大了容易不收斂。它僅用於用梯度下降求解。
--這兩者其實沒太大關係。
lambdamart
中其實兩者都用了,而外部可配的引數是
shrinkage
而不是gradient
步長。
5. gbdt中的gradient不一定必須是gradient見第1
部分的兩個版本。
《轉》 GBDT(MART)概念簡介
gbdt gradient boosting decision tree 又叫 mart multiple additive regression tree 是一種用於回歸的機器學習演算法,該演算法由多棵決策樹組成,所有樹的結論累加起來做最終答案。當把目標函式做變換後,該演算法亦可用於分類或排序。本...
原創 oracle sequence簡介
sequence簡介 2013 12 26 一 概述 sequence是序列號的意思,每次取的時候它會自動增加。sequence與表沒有從屬關係,與表一樣屬於使用者。二 主要內容 1 create sequence語法 首先使用者要有create sequence或者create any seque...
UML簡介(原創)
臭雞蛋什麼的等下再扔,uml是個很大的主題,輪不到我來做什麼總結,只是談談我的觀點 軟體工程領域在1995年至1997年取得了前所未有的進展,其成果超過軟體工程領域過去15年來的成就總和。其中最重要的 具有劃時代重大意義的成果之一就是統一建模語言 uml unified modeling langu...