bagging和boosting都属于组合学习算法,都是将简单的分类或者回归算法组合在一起来提高模型的分类或者回归效果,但是两者还是有区别的,这篇文章主要梳理下两者的区别和特点。
1、bagging
步骤:
(1)从原始样本里抽取训练集。每一轮从原始样本中使用又放回的方法抽取n个训练样本,一共进行k次抽取,得到k个训练集。
(2)每次使用一个训练集得到一个模型,k个训练集一共得到k个模型。
(3)对于分类问题,对k个模型投票得到结果,对于回归问题,将均值作为最后的结果
注意:
(1)在训练集中,有的样本可能被多次抽到,有的可能一次都没有被抽中。
(2)k个训练集之间是独立的。
(3)所有模型的重要性是相同的。
2、boosting
核心思想:将弱分类器组合成强分类器。
通过加法模型将弱分类器进行线性组合,比如说最经典的就是adaboost,以及后面学习的gbdt和xgboost,对于adaboot,这里注意有两个权值:
(1)训练数据的权值:提高前一轮被弱分类器分错样本的权值,减小分对的样本的权值,是分类器重点关注误分类的样本。
(2)分类器的权重:采用加权多数表决,增大错误率小的权值,减小错误率大的分类器的权值。就是分的越准,说的越算。对于gbdt来说,是通过拟合残差,一步步降低残差的方法来的得到最终的组合模型的。
3、两者的区别
(1)样本选择
bagging:有放回抽样
boosting:全量数据训练
(2)样本权重
bagging:每个样本权重相等
boosting:不断调整权重,分错的重点关注,权重变大
(3)预测函数
bagging:所有预测函数(分类器/回归器)权重相等
boosting:每个预测函数都有自己的权重,误差小的权重高
(4)并行计算
bagging:每个预测函数之间相互独立,可并行
boosting:按顺序生成,相互依赖,不能并行。但是可以对分裂点的计算实行并行化。
4、扩展
(1)Bagging + 决策树 = 随机森林
(2)AdaBoost + 决策树 = 提升树
(3)Gradient Boosting + 决策树 = GBDT
5、与偏差方差的对应关系
我们先回顾一下高偏差和高方差的原因:
高偏差:模型过于简单,损失函数过大
高方差:模型过于复杂,记住了太多的细节噪音
bagging中的每一个预测函数的偏差都比较低(如果是决策树,是需要完全分裂的),并且都有可能发生过拟合,所以将多个预测函数进行平均,起到了降低方差的作用。
boosting是对弱分类器的组合,弱分类器的偏差高,强分类器的偏差低,所以boosting起到了降低偏差的作用
参考文章:
统计学习方法
http://www.cnblogs.com/liuwu265/p/4690486.html
https://www.zhihu.com/question/26760839