Ensemble Learning: Bootstrap aggregating (Bagging) & Boosting & Stacked generalization (Stacking)

时间:2021-03-16 19:52:24

Booststrap aggregating (有些地方译作:引导聚集),也就是通常为大家所熟知的bagging。在维基上被定义为一种提升机器学习算法稳定性和准确性的元算法,常用于统计分类和回归中。

而Boosting在维基中被定义为一种主要用来减少偏差(Bias)和同时也可降低方差(Variance)的机器学习元算法,是一个将弱学习器转化为强学习器的机器学习算法族。最初由Kearns 和 Valiant (1988,1989)提出的一个问题发展而来:Can a set of weak learners create a single strong learner? (1996年,Breiman)

Stacked generalization (stacking) (Wolpert, 1992) 是一种组合多个模型的方法,虽然是一个不错的idea,但是实际应用中不如bagging和boosting广泛。Stacking常用来组合不同类型的模型。

三者都是元算法,也都是应用在组合学习(Ensemble learning)方面的算法。

Bagging的策略:

1. 给定一个大小为d训练集D;

2. Bagging通过从D中进行可重复的均匀采样 (by sampling from D uniformly and with replacement),得到m个新的训练集Di, 每个Di的大小为n' ;

3. 将得到的m个新训练集,分布进行回归或者分类,得到m个最终的结果;

4. 由m个结果得到最终结果,对于回归:将m个结果进行平均;对于分类:将m个结果进行投票,票数多的为最终分类值。

Boosting的策略:

1. 在训练集上,训练一个弱分类器;

2. 添加一个弱分类器进行分类学习:

a. 在这个过程中,由上次的结果进行权值调整, 训练集中数据被重新加权:对错分的样本数据增加权重,对正确分类的样本数据进行降低权重(有些boosting算法会对反复被错分的样本进行降权处理,如BrownBoost和boost by majority);

b. 在权值调整后的训练集上,进行弱分类器的学习训练;

3. 迭代步骤2

Stacking的步骤如下:

1. 将训练集分成两个不想交的部分;

2. 在第一部分的训练集上训练若干个基本学习器;

3. 在第二部分的训练集上测试得到的基本学习器;

4. 使用步骤3中的预测结果作为输入,将正确的响应(responses)作为输出,训练更高级别的学习器。

步骤1到3,类似与交叉验证(cross-validation),但是不同于winner-takes-all的策略,stacking通过组合基本分类器来得到更高级的学习结果。

总结一下,组合算法(combiner algorithm)使用所有其他算法的预测作为附加输入(additional inputs)来训练得到最终的预测结果。理论上可以表示任何一种组合学习方法(ensemble techniques);实际中,单层的逻辑回归模型(single-layer logistic regression model)通常被用作组合器(combiner)。

Bagging与Boosting二者的区别:

(1)从重采样的角度:Bagging对样本进行重采样;相对的,Boosting重采样的不是样本,而是样本分布,对正确分类的样本降权,对错误分类的样本加权(而这些样本通常就是分类边界附近的样本),最后分类器是多个弱分类器的加权组合(线性叠加), AdaBoost是其中代表方法。

(2)从最终目标角度:Bagging 可以看作是提升不稳定分类器的效果;而Boosting 最终目标是提高弱分类器的分类精度。