【問(wèn)】xgboost/gbdt在調(diào)參時(shí)為什么樹(shù)的深度很少就能達(dá)到很高的精度?
用xgboost/gbdt在在調(diào)參的時(shí)候把樹(shù)的最大深度調(diào)成6就有很高的精度了。但是用DecisionTree/RandomForest的時(shí)候需要把樹(shù)的深度調(diào)到15或更高。用RandomForest所需要的樹(shù)的深度和DecisionTree一樣我能理解,因?yàn)樗怯胋agging的方法把DecisionTree組合在一起,相當(dāng)于做了多次DecisionTree一樣。但是xgboost/gbdt僅僅用梯度上升法就能用6個(gè)節(jié)點(diǎn)的深度達(dá)到很高的預(yù)測(cè)精度,使我驚訝到懷疑它是黑科技了。請(qǐng)問(wèn)下xgboost/gbdt是怎么做到的?它的節(jié)點(diǎn)和一般的DecisionTree不同嗎?
【答】
這是一個(gè)非常好的問(wèn)題,題主對(duì)各算法的學(xué)習(xí)非常細(xì)致透徹,問(wèn)的問(wèn)題也關(guān)系到這兩個(gè)算法的本質(zhì)。這個(gè)問(wèn)題其實(shí)并不是一個(gè)很簡(jiǎn)單的問(wèn)題,我嘗試用我淺薄的機(jī)器學(xué)習(xí)知識(shí)對(duì)這個(gè)問(wèn)題進(jìn)行回答。
一句話的解釋,來(lái)自周志華老師的機(jī)器學(xué)習(xí)教科書( 機(jī)器學(xué)習(xí)-周志華):Boosting主要關(guān)注降低偏差,因此Boosting能基于泛化性能相當(dāng)弱的學(xué)習(xí)器構(gòu)建出很強(qiáng)的集成;Bagging主要關(guān)注降低方差,因此它在不剪枝的決策樹(shù)、神經(jīng)網(wǎng)絡(luò)等學(xué)習(xí)器上效用更為明顯。
隨機(jī)森林(random forest)和GBDT都是屬于集成學(xué)習(xí)(ensemble learning)的范疇。集成學(xué)習(xí)下有兩個(gè)重要的策略Bagging和Boosting。
Bagging算法是這樣做的:每個(gè)分類器都隨機(jī)從原樣本中做有放回的采樣,然后分別在這些采樣后的樣本上訓(xùn)練分類器,然后再把這些分類器組合起來(lái)。簡(jiǎn)單的多數(shù)投票一般就可以。其代表算法是隨機(jī)森林。Boosting的意思是這樣,他通過(guò)迭代地訓(xùn)練一系列的分類器,每個(gè)分類器采用的樣本分布都和上一輪的學(xué)習(xí)結(jié)果有關(guān)。其代表算法是AdaBoost, GBDT。
其實(shí)就機(jī)器學(xué)習(xí)算法來(lái)說(shuō),其泛化誤差可以分解為兩部分,偏差(bias)和方差(variance)。這個(gè)可由下圖的式子導(dǎo)出(這里用到了概率論公式D(X)=E(X^2)-[E(X)]^2)。偏差指的是算法的期望預(yù)測(cè)與真實(shí)預(yù)測(cè)之間的偏差程度,反應(yīng)了模型本身的擬合能力;方差度量了同等大小的訓(xùn)練集的變動(dòng)導(dǎo)致學(xué)習(xí)性能的變化,刻畫了數(shù)據(jù)擾動(dòng)所導(dǎo)致的影響。這個(gè)有點(diǎn)兒繞,不過(guò)你一定知道過(guò)擬合。
如下圖所示,當(dāng)模型越復(fù)雜時(shí),擬合的程度就越高,模型的訓(xùn)練偏差就越小。但此時(shí)如果換一組數(shù)據(jù)可能模型的變化就會(huì)很大,即模型的方差很大。所以模型過(guò)于復(fù)雜的時(shí)候會(huì)導(dǎo)致過(guò)擬合。
當(dāng)模型越簡(jiǎn)單時(shí),即使我們?cè)贀Q一組數(shù)據(jù),最后得出的學(xué)習(xí)器和之前的學(xué)習(xí)器的差別就不那么大,模型的方差很小。還是因?yàn)槟P秃?jiǎn)單,所以偏差會(huì)很大。

模型復(fù)雜度與偏差方差的關(guān)系圖
也就是說(shuō),當(dāng)我們訓(xùn)練一個(gè)模型時(shí),偏差和方差都得照顧到,漏掉一個(gè)都不行。
對(duì)于Bagging算法來(lái)說(shuō),由于我們會(huì)并行地訓(xùn)練很多不同的分類器的目的就是降低這個(gè)方差(variance) ,因?yàn)椴捎昧讼嗷オ?dú)立的基分類器多了以后,h的值自然就會(huì)靠近.所以對(duì)于每個(gè)基分類器來(lái)說(shuō),目標(biāo)就是如何降低這個(gè)偏差(bias),所以我們會(huì)采用深度很深甚至不剪枝的決策樹(shù)。
對(duì)于Boosting來(lái)說(shuō),每一步我們都會(huì)在上一輪的基礎(chǔ)上更加擬合原數(shù)據(jù),所以可以保證偏差(bias),所以對(duì)于每個(gè)基分類器來(lái)說(shuō),問(wèn)題就在于如何選擇variance更小的分類器,即更簡(jiǎn)單的分類器,所以我們選擇了深度很淺的決策樹(shù)。
五、拓展
最近引起關(guān)注的一個(gè)Gradient Boosting算法:xgboost,在計(jì)算速度和準(zhǔn)確率上,較GBDT有明顯的提升。xgboost 的全稱是eXtreme Gradient Boosting,它是Gradient Boosting Machine的一個(gè)c++實(shí)現(xiàn),作者為正在華盛頓大學(xué)研究機(jī)器學(xué)習(xí)的大牛陳天奇 。xgboost最大的特點(diǎn)在于,它能夠自動(dòng)利用CPU的多線程進(jìn)行并行,同時(shí)在算法上加以改進(jìn)提高了精度。它的處女秀是Kaggle的 希格斯子信號(hào)識(shí)別競(jìng)賽,因?yàn)槌霰姷男逝c較高的預(yù)測(cè)準(zhǔn)確度在比賽論壇中引起了參賽選手的廣泛關(guān)注。值得我們?cè)贕BDT的基礎(chǔ)上對(duì)其進(jìn)一步探索學(xué)習(xí)。