為什麼xgboost/gbdt在調參時為什麼樹的深度很少就能達到很高的精度?

提主剛接觸機器學習,參加kaggle的時候,用xgboost/gbdt在在調參的時候把樹的最大深度調成6就有很高的精度了。但是用DecisionTree/RandomForest的時候需要把樹的深度調到15或更高。

用RandomForest所需要的樹的深度和DecisionTree一樣我能理解,因為它是用bagging的方法把DecisionTree組合在一起,相當於做了多次DecisionTree一樣。

但是xgboost/gbdt僅僅用梯度上升法就能用6個節點的深度達到很高的預測精度,使我驚訝到懷疑它是黑科技了0.0

請問下xgboost/gbdt是怎麼做到的?它的節點和一般的DecisionTree不同嗎?

原諒提主對xgboost/gbdt了解的不夠深入....


參見這個問題,為什麼說bagging是減少variance,而boosting是減少bias? - 機器學習。

---------------------------------------------------------------------------------------------------------------------------

這是一個非常好的問題,題主對各演算法的學習非常細緻透徹,問的問題也關係到這兩個演算法的本質。這個問題其實並不是一個很簡單的問題,我嘗試用我淺薄的機器學習知識對這個問題進行回答。

一句話的解釋,來自周志華老師的機器學習教科書( 機器學習-周志華):Boosting主要關注降低偏差,因此Boosting能基於泛化性能相當弱的學習器構建出很強的集成;Bagging主要關注降低方差,因此它在不剪枝的決策樹、神經網路等學習器上效用更為明顯。

隨機森林(random forest)和GBDT都是屬於集成學習(ensemble learning)的範疇。集成學習下有兩個重要的策略Bagging和Boosting。

Bagging演算法是這樣做的:每個分類器都隨機從原樣本中做有放回的採樣,然後分別在這些採樣後的樣本上訓練分類器,然後再把這些分類器組合起來。簡單的多數投票一般就可以。其代表演算法是隨機森林。Boosting的意思是這樣,他通過迭代地訓練一系列的分類器,每個分類器採用的樣本分布都和上一輪的學習結果有關。其代表演算法是AdaBoost, GBDT。

其實就機器學習演算法來說,其泛化誤差可以分解為兩部分,偏差(bias)和方差(variance)。這個可由下圖的式子導出(這裡用到了概率論公式D(X)=E(X^2)-[E(X)]^2)。偏差指的是演算法的期望預測與真實預測之間的偏差程度,反應了模型本身的擬合能力;方差度量了同等大小的訓練集的變動導致學習性能的變化,刻畫了數據擾動所導致的影響。這個有點兒繞,不過你一定知道過擬合。

如下圖所示,當模型越複雜時,擬合的程度就越高,模型的訓練偏差就越小。但此時如果換一組數據可能模型的變化就會很大,即模型的方差很大。所以模型過於複雜的時候會導致過擬合。

當模型越簡單時,即使我們再換一組數據,最後得出的學習器和之前的學習器的差別就不那麼大,模型的方差很小。還是因為模型簡單,所以偏差會很大。

也就是說,當我們訓練一個模型時,偏差和方差都得照顧到,漏掉一個都不行。

對於Bagging演算法來說,由於我們會並行地訓練很多不同的分類器的目的就是降低這個方差(variance) mathbf{E}[h-mathbb{E}(h)],因為採用了相互獨立的基分類器多了以後,h的值自然就會靠近mathbb{E}(h).所以對於每個基分類器來說,目標就是如何降低這個偏差(bias),所以我們會採用深度很深甚至不剪枝的決策樹。對於Boosting來說,每一步我們都會在上一輪的基礎上更加擬合原數據,所以可以保證偏差(bias),所以對於每個基分類器來說,問題就在於如何選擇variance更小的分類器,即更簡單的分類器,所以我們選擇了深度很淺的決策樹。


你自己不都說了嗎,一個是隨機bagging,一個是boosting。bagging就是大家都是學渣,每道題都由隨機選出的一群學渣投票決定,這樣需要的學渣比較多,而且每個學渣還都得很努力學習。boosting也是一群學渣,但每個人雖然總分菜,卻是因為偏科導致的,每個學渣都貢獻自己最擅長的那個題目。這樣boosting需要的每個學渣都豪不費力,但是整體上更強了。xgb的學渣還通過預習,讓自己偏科的科目學得更省力。所以整體上xgb看起來是非常省力的一群學渣組成,但是拿到的分數卻很高。


GBDT,樹之間是有聯繫的,後面的樹學習的是前面樹的殘差,也可以理解成之前學習的不太好的地方。後面的樹會對之前樹學習不太好的地方,重點學習。因此哪怕樹的深度比較少,也可以取得很好的效果。而RandomForest每棵樹都是獨立的。


這幾天我自己也在思考答案,想出了一些結果吧。

其實我想問的是,在gbdt演算法調參的過程中,為什麼把樹的深度設定很小就能達到很高的預測或分類精度。

我的答案是,考慮這個簡化的操作:試想把樹的深度設為2,那麼gbdt裡面的基學習器都是二分類決策樹,然後自己在二維坐標繫上畫很多點,然後不停的用boosting的方法用二分類決策樹去進行分類,不同的是,我們簡化權重的計算方式,初始化權重都為1,每次分錯權重不變,分對則權重將為原來的一半,最終能用深度為2的樹成功對很多不規則的點進行分類。

然而用深度為2的樹,用類似RF的bagging方法也能成功對不規則的點分類。

所以到這裡,我們實際操作了,用深度低的樹通過ensemble對於不規則的點的分類這種「黑科技」。

那麼為什麼gbdt在樹的深度很小的時候能很快達到很高的預測或分類精度呢?或者說,它比RF明顯。

我的理解是,因為gbdt更多的是一種優化演算法具體怎麼優化的,期待牛人用公式解答


這個問題gbm的論文有提到,先佔坑,後面有空來答


推薦閱讀:

如何看待mahout和milib之間的關係,mahout真的死了么?
天池大數據競賽和Kaggle、DataCastle的比較,哪個比較好?
用R語言的公司多嗎?
SVD 降維體現在什麼地方?
随机梯度下降是坐标下降的一种?

TAG:數據挖掘 | 機器學習 |