標籤:網路 並行 模型 clear actual tar 機器 detail and
XGBoost參數調優完全指南(附Python代碼):http://www.2cto.com/kf/201607/528771.html
https://www.zhihu.com/question/41354392
【以下轉自知乎】https://www.zhihu.com/question/45487317為什麼xgboost/gbdt在調參時為什麼樹的深度很少就能達到很高的精度?
參加kaggle的時候,用xgboost/gbdt在在調參的時候把樹的最大深度調成6就有很高的精度了。但是用DecisionTree/RandomForest的時候需要把樹的深度調到15或更高。
用RandomForest所需要的樹的深度和DecisionTree一樣我能理解,因為它是用bagging的方法把DecisionTree組合在一起,相當於做了多次DecisionTree一樣。
但是xgboost/gbdt僅僅用梯度上升法就能用6個節點的深度達到很高的預測精度? 於菲
連結:https://www.zhihu.com/question/45487317/answer/99153174
來源:知乎
著作權歸作者所有,轉載請聯絡作者獲得授權。
一句話的解釋,來自周志華老師的機器學習教科書( 機器學習-周志華):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更小的分類器,即更簡單的分類器,所以我們選擇了深度很淺的決策樹。
XGBoost參數調優完全指南(附Python代碼)