Gbdt(mart)概念簡介

jopen 9年前發布 | 22K 次閱讀 Gbdt 機器學習

GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一種用于回歸的機器學習算法,該算法由多棵決策樹組成,所有樹的結論累加起來做最終答案。當把目標函數做變換后,該算法亦可用于分類或排序。

本文主要從高層明確幾個GBDT概念,主要講GBDT的兩個版本以及GBDT是什么不是什么。詳細介紹見文中的鏈接。

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就是用的后者。

GBDT中的Tree是回歸樹,不是分類決策樹。

詳見GBDT入門教程

GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一種迭代的決策樹算法,該算法由多棵決策樹組成,所有樹的結論累加起來做最終答案。它在被提出之初就和SVM一起被認為是泛化能力(generalization)較強的算法。近些年更因為被用于搜索排序的機器學習模型而引起大家關注。 GBDT除了描述的殘差版本外還有另一種GBDT描述,兩者大概相同,但求解方法(Gradient應用)不同。其區別和另一版本的介紹鏈接見: 由于另一版本介紹博客中亦有不少錯誤,建議大家還是先看本篇,再跳到另一版本描述,這個順序當能兩版本都看懂。 第1~4節:GBDT算法內部究竟是如何工作的?第5節:它可以用于解決哪些問題?第6節:它又是怎樣應用于搜索排序的呢? 比較推薦的兩篇英文文獻,喜歡英文原版的同學可直接閱讀: Boosting Decision Tree入門教程 http://www.schonlau.net/publication/05stata_boosting…

GBDT中的Boost是樣本目標的迭代,不是re-sampling的迭代,也不是Adaboost。

Adaboost中的boosting指從樣本中按分類對錯,分配不同的weight,計算cost function時使用這些weight,從而讓“錯分的樣本權重越來越大,直到它們被分對”。Bootstrap也有類似思想,只不過它可以利用不同的 weight作為sample概率對訓練樣本集做re-sample,讓錯分的樣本被進一步學習,而分類正確的樣本就不用再學了。但GBDT中的 boost完全不同,跟上述邏輯沒有任何關系,GBDT中每步boost的樣本集都是不變的,變的是每個樣本的回歸目標值。詳見之前我寫的GBDT入門教程。

Shrinkage不是Gradient的步長

Shrinkage只是一種大步變小步的逐步求精方法。這點看起來和Gradient目標=Gradient單位方向*步長挺像,但其實很不同:

  1. shrinkage的處理對象不一定是Gradient方向,也可以是殘差,可以是任何增量,即目標=任何東西*shrinkage步長。
  2. shrinkage決定的是最終走出的一步大小,而不是希望走出的一步大小。前者是對于已有的學習結果打折,后者是在決定學習目標時對局部最優方向上走多遠負責。
  3. shrinkage設小了只會讓學習更慢,設大了就等于沒設,它適用于所有增量迭代求解問題;而Gradient的步長設小了容易陷入局部最優點,設大了容易不收斂。它僅用于用梯度下降求解。這兩者其實沒太大關系。LambdaMART中其實兩者都用了,而外部可配的參數是shrinkage而不是Gradient步長。

GBDT中的Gradient不一定必須是Gradient

見第1部分的兩個版本。

來自:http://suanfazu.com/t/gbdt-mart-gai-nian-jian-jie/133

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!