《轉》 GBDT(MART)概念簡介

2021-07-23 04:32:36 字數 2047 閱讀 4440

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 是一種用於回歸的機器學習演算法,該演算法由多棵決策樹組成,所有樹的結論累加起來做最終答案。當把目標函式做變換後,該演算法亦可用於分類或排序。本文...

Zookeeper概念簡介

zookeeper是乙個分布式協調服務 就是為使用者的分布式應用程式提供協調服務 a zookeeper是為別的分布式程式服務的 b zookeeper 本身就是乙個分布式程式 只要有半數以上節點存活,zk就能正常服務,zookeeper適合裝在奇數臺機器上!c zookeeper所提供的服務涵蓋 ...

Etcd概念簡介

etcd 是乙個分布式鍵值對儲存系統,由coreos 開發,內部採用raft 協議作為一致性演算法,用於可靠 快速地儲存關鍵資料,並提供訪問。通過分布式鎖 leader選舉和寫屏障 write barriers 來實現可靠的分布式協作。etcd集群是為高可用 持久化資料儲存和檢索而準備。etcd 這...