GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一種用于回歸的機(jī)器學(xué)習(xí)算法,該算法由多棵決策樹組成,所有樹的結(jié)論累加起來做最終答案。當(dāng)把目標(biāo)函數(shù)做變換后,該算法亦可用于分類或排序。
本文主要從高層明確幾個(gè)GBDT概念,主要講GBDT的兩個(gè)版本以及GBDT是什么不是什么。詳細(xì)介紹見文中的鏈接。
1. GBDT的兩個(gè)不同版本(重要) 目前GBDT有兩個(gè)不同的描述版本,兩者各有支持者,讀文獻(xiàn)時(shí)要注意區(qū)分。殘差版本把GBDT說成一個(gè)殘差迭代樹,認(rèn)為每一棵回歸樹都在學(xué)習(xí)前N-1棵樹的殘差,之前我寫的GBDT入門教程主要在描述這一版本,ELF開源軟件實(shí)現(xiàn)中用的也是這一版本。Gradient版本把GBDT說成一個(gè)梯度迭代樹,使用梯度下降法求解,認(rèn)為每一棵回歸樹在學(xué)習(xí)前N-1棵樹的梯度下降值,之前leftnoteasy的博客中介紹的為此版本,umass的源碼實(shí)現(xiàn)中用的則是這一版本(準(zhǔn)確的說是LambdaMART中的MART為這一版本,MART實(shí)現(xiàn)則是前一版本)。
對(duì)GBDT無基礎(chǔ)的朋友可以先分別看一下前面兩篇博文教程??偟膩碚f兩者相同之處在于,都是迭代回歸樹,都是累加每顆樹結(jié)果作為最終結(jié)果(Multiple Additive Regression Tree),每棵樹都在學(xué)習(xí)前N-1棵樹尚存的不足,從總體流程和輸入輸出上兩者是沒有區(qū)別的;兩者的不同主要在于每步迭代時(shí),是否使用Gradient作為求解方法。前者不用Gradient而是用殘差----殘差是全局最優(yōu)值,Gradient是局部最優(yōu)方向*步長(zhǎng),即前者每一步都在試圖讓結(jié)果變成最好,后者則每步試圖讓結(jié)果更好一點(diǎn)。
兩者優(yōu)缺點(diǎn)。看起來前者更科學(xué)一點(diǎn)--有絕對(duì)最優(yōu)方向不學(xué),為什么舍近求遠(yuǎn)去估計(jì)一個(gè)局部最優(yōu)方向呢?原因在于靈活性。前者最大問題是,由于它依賴殘差,cost function一般固定為反映殘差的均方差,因此很難處理純回歸問題之外的問題。而后者求解方法為梯度下降,只要可求導(dǎo)的cost function都可以使用,所以用于排序的LambdaMART就是用的后者。
2. GBDT中的Tree是回歸樹,不是分類決策樹。 詳見之前我寫的GBDT入門教程
3. GBDT中的Boost是樣本目標(biāo)的迭代,不是re-sampling的迭代,也不是Adaboost。 Adaboost中的boosting指從樣本中按分類對(duì)錯(cuò),分配不同的weight,計(jì)算cost function時(shí)使用這些weight,從而讓“錯(cuò)分的樣本權(quán)重越來越大,直到它們被分對(duì)”。Bootstrap也有類似思想,只不過它可以利用不同的weight作為sample概率對(duì)訓(xùn)練樣本集做re-sample,讓錯(cuò)分的樣本被進(jìn)一步學(xué)習(xí),而分類正確的樣本就不用再學(xué)了。但GBDT中的boost完全不同,跟上述邏輯沒有任何關(guān)系,GBDT中每步boost的樣本集都是不變的,變的是每個(gè)樣本的回歸目標(biāo)值。詳見之前我寫的GBDT入門教程。
4. Shrinkage不是Gradient的步長(zhǎng) Shrinkage只是一種大步變小步的逐步求精方法。這點(diǎn)看起來和Gradient目標(biāo)=Gradient單位方向*步長(zhǎng)挺像。 但其實(shí)很不同:1)shrinkage的處理對(duì)象不一定是Gradient方向,也可以是殘差,可以是任何增量,即目標(biāo)=任何東西*shrinkage步長(zhǎng)。2)shrinkage決定的是最終走出的一步大小,而不是希望走出的一步大小。前者是對(duì)于已有的學(xué)習(xí)結(jié)果打折,后者是在決定學(xué)習(xí)目標(biāo)時(shí)對(duì)局部最優(yōu)方向上走多遠(yuǎn)負(fù)責(zé)。3)shrinkage設(shè)小了只會(huì)讓學(xué)習(xí)更慢,設(shè)大了就等于沒設(shè),它適用于所有增量迭代求解問題;而Gradient的步長(zhǎng)設(shè)小了容易陷入局部最優(yōu)點(diǎn),設(shè)大了容易不收斂。它僅用于用梯度下降求解。--這兩者其實(shí)沒太大關(guān)系。LambdaMART中其實(shí)兩者都用了,而外部可配的參數(shù)是shrinkage而不是Gradient步長(zhǎng)。
5. GBDT中的Gradient不一定必須是Gradient 見第1部分的兩個(gè)版本。
原創(chuàng)博文,轉(zhuǎn)載請(qǐng)注明出處:http://hi.baidu.com/new/hehehehello |
|