[转] boosting vs bagging
from : https://www.jianshu.com/p/3b512ca9035b
关键点
- 降低方差 & 降低偏差
- 降低过拟合 & 降低欠拟合
- 并行,彼此独立 & 串行,相互依赖
弱分类器的进化
Bagging(Breiman,1996): 用bootstrap-resample采集数据。
Random Forest(Freund & Shapire ,1996) : 采集列
Boosting(Breiman,1999): 权重
Bagging的思想(Bagging和随机森林)
Bagging的途径是降低 方差。是要降低过拟合。
因为Bagging是并行的生成一堆决策树,这些决策树可以不做剪枝。它其实是生成了一堆 强学习器。也就是每个学习器都会有过拟合的问题,但是多个组合在一起,可以降低过拟合。
Boosting的思想(Adaboost和GBDT)
Boosting的途径是降低 偏差。是要降低欠拟合。
因为Bossting,包括Adaboost和GBDT,都是生成了一堆弱学习器,甚至是只有一层的决策树(这也是为什么叫做树桩)。
它是串行的生成一系列的弱学习器,但是彼此之间能够相互学习。
bagging 、随机森林是bagging的思想。
adaboost和gbdt是boosting的思想。
Bagging思想(平等思想)
bagging思想是把多个分类器的结果简单相加。各个分类器是相互独立的,并且地位对等。所以很容易并行,很容易map-reduce。每个分类器地位相同,或者说影响权重相同。
由于生成不同的分类器需要不同的数据集,两个算法的差异就体现在生成数据集的手法上。
bagging(boosting aggregation) 是对样本随机采样,随机森林是对特征随机抽取,二者都有采样过程。
Boosting思想(精英路线)
而boosting的思想走的是精英路线,是对bagging的“独立,平等”这些特点或者说缺点进行了改进.改进的指导思想是希望多个分类器不是完全独立,地位不完全对等,有精英,有普罗大众,互为补充的。最终投票时,精英和大众的话语权也是不一样的。
boosting是如何生成多分不同的数据集的呢?
adaboost和gbdt没有采样的过程,是用的全量数据。
GBDT的做法是:每轮迭代结束时(生成了一棵树),会改变样本的标签(也就是Y值);即每一轮的样本标签不相同,是之前的学习残差作为样本的新标签。
adaboost的做法是:每轮迭代结束时(生成了一棵树),会改变样本的权重,换句话说对每个样本判断对错的惩罚不再一样,同时,每个树的权重也不一样。
adaboost用于解决是二分类问题。损失函数是sign(符号函数的)。所以adaboost不改变样本的标签。
adaboost和gbdt的区别
1、gbdt更新的是样本标签 , adaboost更新的是样本的权重
2、gbdt 生成一个新的弱模型时,输入是依赖于之前生成的全部弱模型的结果;而adaboost每个新的弱模型仅依赖于上一个弱模型
3、样本有权重:adaboost中样本的权重其实就是样本的分布权重,不同分布的样本就会产生不同的弱模型;每轮学习的结果是改变每个样本的权重,改变这些权重的目地是希望把在这一轮学习器上学习表现最差的样本的权重加大。也就是说,希望进到下一轮学习的样本中,那些本轮表现差的样本会更被重视。
4、模型有权重
各个权重相同(也可以不同):gbdt
各个权重不同:adaboost
作者:mingyan926
链接:https://www.jianshu.com/p/3b512ca9035b
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。