你自己不都说了吗,一个是随机bagging,一个是boosting。bagging就是大家都是学渣,每道题都由随机选出的一群学渣投票决定,这样需要的学渣比较多,而且每个学渣还都得很努力学习。boosting也是一群学渣,但每个人虽然总分菜,却是因为偏科导致的,每个学渣都贡献自己最擅长的那个题目。这样boosting需要的每个学渣都豪不费力,但是整体上更强了。xgb的学渣还通过预习,让自己偏科的科目学得更省力。所以整体上xgb看起来是非常省力的一群学渣组成,但是拿到的分数却很高。
这是一个非常好的问题,题主对各算法的学习非常细致透彻,问的问题也关系到这两个算法的本质。这个问题其实并不是一个很简单的问题,我尝试用我浅薄的机器学习知识对这个问题进行回答。
一句话的解释,来自周志华老师的机器学习教科书( 机器学习-周志华):Boosting主要关注降低偏差,因此Boosting能基于泛化性能相当弱的学习器构建出很强的集成;Bagging主要关注降低方差,因此它在不剪枝的决策树、神经网络等学习器上效用更为明显。
随机森林(random forest)和GBDT都是属于集成学习(ensemble learning)的范畴。集成学习下有两个重要的策略Bagging和Boosting。
Bagging算法是这样做的:每个分类器都随机从原样本中做有放回的采样,然后分别在这些采样后的样本上训练分类器,然后再把这些分类器组合起来。简单的多数投票一般就可以。其代表算法是随机森林。Boosting的意思是这样,他通过迭代地训练一系列的分类器,每个分类器采用的样本分布都和上一轮的学习结果有关。其代表算法是AdaBoost, GBDT。
其实就机器学习算法来说,其泛化误差可以分解为两部分,偏差(bias)和方差(variance)。这个可由下图的式子导出(这里用到了概率论公式D(X)=E(X^2)-[E(X)]^2)。偏差指的是算法的期望预测与真实预测之间的偏差程度,反应了模型本身的拟合能力;方差度量了同等大小的训练集的变动导致学习性能的变化,刻画了数据扰动所导致的影响。这个有点儿绕,不过你一定知道过拟合。
<img src="https://i-blog.csdnimg.cn/blog_migrate/5ef9a5930e184bacf915a9827b95eede.png" data-rawwidth="320" data-rawheight="108" class="content_image" width="320">如下图所示,当模型越复杂时,拟合的程度就越高,模型的训练偏差就越小。但此时如果换一组数据可能模型的变化就会很大,即模型的方差很大。所以模型过于复杂的时候会导致过拟合。
如下图所示,当模型越复杂时,拟合的程度就越高,模型的训练偏差就越小。但此时如果换一组数据可能模型的变化就会很大,即模型的方差很大。所以模型过于复杂的时候会导致过拟合。
当模型越简单时,即使我们再换一组数据,最后得出的学习器和之前的学习器的差别就不那么大,模型的方差很小。还是因为模型简单,所以偏差会很大。
<img src="https://i-blog.csdnimg.cn/blog_migrate/0aa59b8d8c1999a24c77872b2c11635b.png" data-rawwidth="455" data-rawheight="281" class="origin_image zh-lightbox-thumb" width="455" data-original="https://pic4.zhimg.com/1cca0e32949ab02127e56636b0ff080f_r.png">
也就是说,当我们训练一个模型时,偏差和方差都得照顾到,漏掉一个都不行。
对于Bagging算法来说,由于我们会并行地训练很多不同的分类器的目的就是降低这个方差(variance)
,因为采用了相互独立的基分类器多了以后,
h的值自然就会靠近
.所以对于每个基分类器来说,目标就是如何降低这个偏差(bias),所以我们会采用深度很深甚至不剪枝的决策树。
对于Boosting来说,每一步我们都会在上一轮的基础上更加拟合原数据,所以可以保证偏差(bias),所以对于每个基分类器来说,问题就在于如何选择variance更小的分类器,即更简单的分类器,所以我们选择了深度很浅的决策树。
一句话的解释,来自周志华老师的机器学习教科书( 机器学习-周志华):Boosting主要关注降低偏差,因此Boosting能基于泛化性能相当弱的学习器构建出很强的集成;Bagging主要关注降低方差,因此它在不剪枝的决策树、神经网络等学习器上效用更为明显。
随机森林(random forest)和GBDT都是属于集成学习(ensemble learning)的范畴。集成学习下有两个重要的策略Bagging和Boosting。
Bagging算法是这样做的:每个分类器都随机从原样本中做有放回的采样,然后分别在这些采样后的样本上训练分类器,然后再把这些分类器组合起来。简单的多数投票一般就可以。其代表算法是随机森林。Boosting的意思是这样,他通过迭代地训练一系列的分类器,每个分类器采用的样本分布都和上一轮的学习结果有关。其代表算法是AdaBoost, GBDT。
其实就机器学习算法来说,其泛化误差可以分解为两部分,偏差(bias)和方差(variance)。这个可由下图的式子导出(这里用到了概率论公式D(X)=E(X^2)-[E(X)]^2)。偏差指的是算法的期望预测与真实预测之间的偏差程度,反应了模型本身的拟合能力;方差度量了同等大小的训练集的变动导致学习性能的变化,刻画了数据扰动所导致的影响。这个有点儿绕,不过你一定知道过拟合。
<img src="https://i-blog.csdnimg.cn/blog_migrate/5ef9a5930e184bacf915a9827b95eede.png" data-rawwidth="320" data-rawheight="108" class="content_image" width="320">如下图所示,当模型越复杂时,拟合的程度就越高,模型的训练偏差就越小。但此时如果换一组数据可能模型的变化就会很大,即模型的方差很大。所以模型过于复杂的时候会导致过拟合。
![](https://i-blog.csdnimg.cn/blog_migrate/5ef9a5930e184bacf915a9827b95eede.png)
当模型越简单时,即使我们再换一组数据,最后得出的学习器和之前的学习器的差别就不那么大,模型的方差很小。还是因为模型简单,所以偏差会很大。
<img src="https://i-blog.csdnimg.cn/blog_migrate/0aa59b8d8c1999a24c77872b2c11635b.png" data-rawwidth="455" data-rawheight="281" class="origin_image zh-lightbox-thumb" width="455" data-original="https://pic4.zhimg.com/1cca0e32949ab02127e56636b0ff080f_r.png">
![](https://i-blog.csdnimg.cn/blog_migrate/0aa59b8d8c1999a24c77872b2c11635b.png)
也就是说,当我们训练一个模型时,偏差和方差都得照顾到,漏掉一个都不行。
对于Bagging算法来说,由于我们会并行地训练很多不同的分类器的目的就是降低这个方差(variance)
对于Boosting来说,每一步我们都会在上一轮的基础上更加拟合原数据,所以可以保证偏差(bias),所以对于每个基分类器来说,问题就在于如何选择variance更小的分类器,即更简单的分类器,所以我们选择了深度很浅的决策树。
这几天我自己也在思考答案,想出了一些
结果吧。
其实我想问的是,在gbdt算法 调参的过程中,为什么把树的深度设定很小就能达到很高的预测或分类精度。
我的答案是,考虑这个 简化的操作:试想把树的深度设为2,那么gbdt里面的基学习器都是二分类决策树,然后自己在二维坐标系上画很多点,然后不停的用boosting的方法用二分类决策树去进行分类,不同的是,我们简化权重的计算方式, 初始化权重都为1,每次分错权重不变,分对则权重将为原来的一半,最终能用深度为2的树成功对很多不规则的点进行分类。
然而用深度为2的树,用类似RF的bagging方法也能成功对不规则的点分类。
所以到这里,我们 实际操作了,用深度低的树通过ensemble对于不规则的点的分类这种“黑科技”。
那么为什么gbdt在树的深度很小的时候能很快达到很高的预测或分类精度呢?或者说,它比RF明显。
我的理解是,因为gbdt更多的是一种 优化算法。 具体怎么优化的,期待牛人用公式解答。
其实我想问的是,在gbdt算法 调参的过程中,为什么把树的深度设定很小就能达到很高的预测或分类精度。
我的答案是,考虑这个 简化的操作:试想把树的深度设为2,那么gbdt里面的基学习器都是二分类决策树,然后自己在二维坐标系上画很多点,然后不停的用boosting的方法用二分类决策树去进行分类,不同的是,我们简化权重的计算方式, 初始化权重都为1,每次分错权重不变,分对则权重将为原来的一半,最终能用深度为2的树成功对很多不规则的点进行分类。
然而用深度为2的树,用类似RF的bagging方法也能成功对不规则的点分类。
所以到这里,我们 实际操作了,用深度低的树通过ensemble对于不规则的点的分类这种“黑科技”。
那么为什么gbdt在树的深度很小的时候能很快达到很高的预测或分类精度呢?或者说,它比RF明显。
我的理解是,因为gbdt更多的是一种 优化算法。 具体怎么优化的,期待牛人用公式解答。