为什么xgboost/gbdt在调参时为什么树的深度很少就能达到很高的精度?

提主刚接触机器学习,参加kaggle的时候,用xgboost/gbdt在在调参的时候把树的最大深度调成6就有很高的精度了。但是用DecisionTre…
关注者
540
被浏览
80,113

7 个回答

参见这个问题,

为什么说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更小的分类器,即更简单的分类器,所以我们选择了深度很浅的决策树。

GBDT,树之间是有联系的,后面的树学习的是前面树的残差,也可以理解成之前学习的不太好的地方。后面的树会对之前树学习不太好的地方,重点学习。因此哪怕树的深度比较少,也可以取得很好的效果。而RandomForest每棵树都是独立的。