集成学习(ensemble [ɒnˈsɒmbl] learning)通过构建并结合多个学习器来完成任务,有时也被称为多分类器系统(multi-classifier system)。
根据基学习器的生成方式,目前的集成学习大体可以分成以下两类:
①序列集成方法,其中参与训练的基学习器按照顺序生成。序列方法的原理是利用基础学习器之间的强依赖关系,通过对之前训练中错误标记的样本赋值较高的权重,来提高整体的预测效果。
②并行集成方法,其中参与训练的基学习器并行生成。并行方法的原理是利用基学习器之间的独立性来显著降低错误率。
前者的代表是Boosting,而后者的代表是Bagging,我们一个一个来聊。
Bagging
Bagging这个名字是由Bootstrap Aggregating缩写而来,包含自助和合计两个单词。
Bootstrap是指它利用了自助采样法(Bootstrap Sampling),这是一种有放回的抽样方法。【给定包含m个样本的数据集,我们先随机抽取出一个样本放入采样集中,再把该样本放回原始数据集,使得下次采样时该样本仍然有可能被选中。】这样经过m次随机采样操作(【】视为一次随机采样操作),我们可以得到一个含m个样本的采样集。
按照相同的方式,我们可以采样出T个含m个训练样本的采样集,然后基于每一个采样集训练出一个基学习器,再将这些基学习器结合,也就是Aggregating。
下面给出了bagging的流程示意图:
Boosting
Boosting是一族将弱学习器提升为强学习器的算法。
- Boosting的两个核心问题
Q1:在每一轮如何改变训练数据的权值或概率分布?
Q2:如何将弱分类器组合成一个强分类器?
A1:通过提高那些在前一轮被弱分类器分错样例的权值,减小前一轮分对样例的权值,来使得分类器对误分的数据有较好的效果。
A2:通过加法模型将弱分类器进行线性组合。
之前写过一篇手写AdaBoost算法的文章,里面介绍的正是Boosting族算法中最著名的AdaBoost算法。另外还有GBDT(Gradient Boost Decision Tree),以及机器学习比赛大杀器XGBoost都是Boosting族的算法。
二者差别
1)样本选择:
Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。
Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化,而其权值是根据上一轮的分类结果进行调整。
2)样例权重:
Bagging:使用均匀取样,每个样例的权重相等
Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大
3)基分类器权重:
Bagging:所有基分类器权重相等
Boosting:每个基分类器都有相应的权重,对于分类误差小的分类器会有更大的权重
4)并行计算:
Bagging:各个基分类器可以并行生成
Boosting:各个基分类器只能顺序生成,因为后一个模型参数需要前一轮模型的结果