集成学习(ensemble learning)是时下非常流行的机器学习算法,它本身不是一个单独的机器学习算法,而是通过在数据上构建多个模型,集成所有模型的建模结果。
我们前面介绍的单一模型可以被称为“个体学习器”,如果是用于分类问题,也可以被称为“弱分类器”,例如决策树。
下面的分类参考周志华老师的教材。
根据个体学习器的生成方式,目前的集成学习方法大致可分为两大类:
(1) 个体学习器间存在强依赖关系、必须串行生成的序列化方法。这种方法我们称为提升法(Boosting),其代表模型有 Adaboost(自适应提升算法,MATLAB分类学习器中使用的模型)、GBDT(梯度提升决策树)、Xgboost(极端梯度提升算法)。
(2) 个体学习器间不存在强依赖关系、可同时生成的并行化方法。这种方法我们称为装袋法(Bagging),另外,大家经常听到的**随机森林(Random Forest)**算法可以视为装袋法(Bagging)的一种改进,它们都是对决策树进行集成。具体的区别可以看周志华老师的教材。( 注意: Bagging 是 Bootstrap aggregating 的缩写,因此有的地方也翻译成自举汇聚法)

下列视频可以初步了解:
(一)概念
学习器
先定义一些基本的,容易混淆的,关于学习器的概念
强学习器:Strong learner,相对于弱学习器而言的概念,强学习器指的是可以预测相当准确结果的学习算法。
弱学习器:Weak learner,相对于强学习器而言,通常这些弱学习器预测的结果只比随机结果稍好一些。
基学习器:Base Learner,集成学习中的个体学习器,基学习器经常是弱学习器,但是并非必须是弱学习器。
基学习算法:Base Learning Algorithm,基学习器所基于的算法,基学习器基于基学习算法生成,比如通过不同的训练集,经过训练之后,生成的不同参数的机器学习模型。
同质基学习器:Homogeneous Base Learner,指使用同样的基学习算法生成的基学习器
异质基学习器:Heterogeneous Base Learner,指使用不同的基学习算法生成的基学习器
集成学习算法
通常来说,生成一个完整的集成学习算法的步骤可以大致分为以下两步:
构建基学习器:生成一系列基学习器,这个过程可以是并行的(Parallel)也可以是顺序的(Sequential)(在顺序型的生成过程中,前期生成的基学习器会对后续生成的学习器有影响)
组合基学习器:这些基学习器被组合起来使用,最常见的组合方法比如用于分类的多数投票(majority voting),以及用于回归的权重平均(weighted averaging)。
集成学习的构建方法可以分为两类:
平行方法:
构建多个独立的学习器,取他们的预测结果的平均
个体学习器之间不存在强依赖关系,一系列个体学习器可以并行生成
通常是同质的弱学习器
代表算法是Bagging和随机森林(Random Forest)系列算法。
顺序化方法:
多个学习器是依次构建的
个体学习器之间存在强依赖关系,因为一系列个体学习器需要串行生成
通常是异质的学习器
代表算法是Boosting系列算法,比如AdaBoost,梯度提升树等
也就是说,如何定义一个完整的集成学习算法,有几个问题需要考虑:
如何生成若干个基学习器
如何选择一种组合策略,将这些个体学习器集合成一个强学习器
集成学习的算法策略有许多种,主要有三个比较有代表性的:Boosting、Bagging、Stacking。
为了说明这三种方法,定义一个二元分类任务:
X表示样例空间,Y表示分类标签,即{-1,+1}
训练数据集D={(x1,y1),(x2,y2),…,(xm,ym)},其中xi∈X,yi∈Y(i=1,…,m)
1.Boosting
Boosting是一系列的算法,这里用其中一种比较有名的算法AdaBoost来举例:
首先,AdaBoost算法将所有的训练样本都赋予同样的权重。
设在第t轮训练时的样例权重分布为Dt,从训练集D 和权重分布Dt,AdaBoost调用基学习算法,生成一个基学习器ht:(X->Y)。
接着,AdaBoost使用训练样本来测试ht,并且将所有分类错误样本的权重增加,从而得到新一轮的权重分布Dt+1。
从训练集D 和权重分布Dt+1,AdaBoost调用基学习算法,生成一个基学习器ht+1:(X->Y)。
以上步骤重复T次,每一次被称为一轮。
最终的算法是这T个基学习器的加权投票,各个学习器的权重在训练过程中决定。
在实践中,有些学习算法可以直接输入加权重的样例,否则的话,样例的权重需要通过“根据权重分布Dt进行采样”来体现。
2.Bagging
Bagging(套袋法)是Bootstrap Aggregating的缩写。
Bootstrap sample(自助法)是统计学中的一种抽样方法。利用有限的样本,经由多次重复抽样(从给定训练集中有放回的均匀抽样,也就是说,每当选中一个样本,其等可能的被再次选中并被再次添加回训练集中),建立起足以代表母体样本分布的新样本。
Bagging的算法如下:
首先在bootstrap抽样的数据集上,通过调用基学习算法,训练出一系列的基学习器
通过多数投票(majority voting),最多票数的类别被选为结果
3.Stacking
Stacking算法像是在Bagging之后增加了一层:
通过调用基学习算法,生成若干独立的基学习器(一级学习器)
接着这些独立的基学习器被通过元学习器(meta-learner,二级学习器)组合起来,其方式是将一级学习器的结果作为输入,标签作为输出进行训练
Bagging(自举汇聚法):Bagging是一种集成学习方法,它的基本思想是生成多个训练数据的子集,然后分别训练每个子集生成一组预测模型,最后汇聚所有模型的预测结果。其关键在于训练数据的生成过程,即使用有放回的随机抽样技术,也就是Bootstrap。这就使得每个模型的训练数据略有不同,从而产生不同的模型,然后通过投票或平均等方式汇聚所有模型的预测结果。这种方法可以有效降低模型的方差,防止过拟合。随机森林就是一个典型的Bagging算法。
Boosting(提升法):Boosting也是一种集成学习方法,它的基本思想是顺序地训练一系列的模型,每个新模型都在尝试修正前一个模型的错误。Boosting方法根据前一个模型的表现调整训练数据的权重,即前一个模型预测错误的数据在后一个模型的训练中会被赋予更大的权重。这种方式使得模型更关注那些“难以解决”的部分,从而使得整个模型的性能得到提升。AdaBoost和Gradient Boosting就是两种典型的Boosting算法。
弱评估器(弱学习器):弱评估器是指模型的预测性能只比随机猜测稍好的模型。在集成学习中,我们将这些性能相对较弱的模型结合在一起,形成一个强评估器。例如,在Adaboost算法中,单层决策树(也叫决策树桩)就是常用的弱评估器。
下面,我们使用一个简单的例子来解释这些概念和整个流程:
假设我们有一个手写数字识别的任务,我们需要训练一个模型来识别0-9的数字。
解释一下Bagging,Boosting和弱评估器
为什么说GBDT算法很好的集合了Bagging,Boosting和弱评估器GBDT(Gradient Boosting Decision Tree)是一个集成学习方法,它主要基于Boosting方法,即通过迭代地训练一系列的模型,每一个新模型都在尝试修正前一个模型的错误。在GBDT中,基础模型是决策树,这个决策树就是所说的弱评估器,因为单独的一个决策树模型往往预测性能不是很好,但是当我们将多个这样的决策树模型集成起来后,整体的预测性能就会有显著提升。
GBDT和Bagging的关联并不是显著的,但是在某种意义上,GBDT的训练过程也有一些Bagging的思想。在GBDT的训练过程中,我们通过梯度下降的方法来优化损失函数,这个过程涉及到对训练数据的重新采样,这个重新采样的过程和Bagging中的Bootstrap采样有一些相似。
总的来说,GBDT主要是基于Boosting方法,通过迭代地训练决策树模型,使得每个新模型都在修正前一个模型的错误,这个过程中也涉及到了弱评估器(决策树)和一些类似于Bagging的重新采样过程。因此,我们可以说GBDT算法很好地集合了Bagging,Boosting和弱评估器。
内容来源:数学建模清风第四次直播:
利用matlab快速实现机器学习
配套的讲义和后续视频
欢迎大家学习