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


問題:

用xgboost/gbdt在在調參的時候把樹的最大深度調成6就有很高的精度了。但是用DecisionTree/RandomForest的時候需要把樹的深度調到15或更高。用RandomForest所需要的樹的深度和DecisionTree一樣我能理解,因為它是用bagging的方法把DecisionTree組合在一起,相當於做了多次DecisionTree一樣。但是xgboost/gbdt僅僅用梯度上升法就能用6個節點的深度達到很高的預測精度,使我驚訝到懷疑它是黑科技了。請問下xgboost/gbdt是怎么做到的?它的節點和一般的DecisionTree不同嗎?

 

回答:
  這是一個非常好的問題,題主對各算法的學習非常細致透徹,問的問題也關系到這兩個算法的本質。這個問題其實並不是一個很簡單的問題,我嘗試用我淺薄的機器學習知識對這個問題進行回答。
  一句話的解釋,來自周志華老師的機器學習教科書( 機器學習-周志華):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) ,因為采用了相互獨立的基分類器多了以后,h的值自然就會靠近.所以對於每個基分類器來說,目標就是如何降低這個偏差(bias),所以我們會采用深度很深甚至不剪枝的決策樹。


  對於Boosting來說,每一步我們都會在上一輪的基礎上更加擬合原數據,所以可以保證偏差(bias),所以對於每個基分類器來說,問題就在於如何選擇variance更小的分類器,即更簡單的分類器,所以我們選擇了深度很淺的決策樹。(回答之精辟清晰)



作者:SiyueLin
鏈接:http://www.jianshu.com/p/005a4e6ac775


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM