在机器学习和统计学习中, 集成学习(Ensemble Learning)是一种将多种学习算法组合在一起以取得更好表现的一种方法。它本身不是一个单独的机器学习算法,而是通过构建并结合多个机器学习器来完成学习任务。 也就是我们常说的“博采众长”。集成学习可以用于分类问题集成回归问题集成特征选取集成异常点检测集成等。

集成学习概述

什么是集成学习(此处以分类为例)

  1. 多个分类方法聚集在一起,以提高分类的准确率(可以是相同or不同算法)
  2. 集成学习法由训练数据构建一组基分类器,然后通过对每个基分类器的预测进行投票来进行分类
  3. 严格来说,集成学习并不算是一种分类器,而是一种分类器结合的方法。
  4. 如果把单个分类器比作一个决策者的话,集成学习的方法就相当于多个决策者共同进行一项决策。

我们可以对集成学习的思想做一个概括(见下图)。对于训练集数据,我们通过训练若干个个体学习器,通过一定的结合策略,就可以最终形成一个强学习器,以达到博采众长的目的。

也就是说,集成学习有两个主要的问题需要解决:

  1. 如何得到若干个个体学习器
  2. 如何选择一种结合策略,将这些个体学习器集合成一个强学习器。

对于第一个问题,如何得到若干个个体学习器,一般有2种选择

  1. 所有的个体学习器都是一个种类的,或者说是同质的。比如都是决策树个体学习器,或者都是神经网络个体学习器。(广泛
  2. 所有的个体学习器不全是一个种类的,或者说是异质的。比如我们有一个分类问题,对训练集采用支持向量机个体学习器,逻辑回归个体学习器和朴素贝叶斯个体学习器来学习,再通过某种结合策略来确定最终的分类强学习器。

目前来说,同质个体学习器的应用是最广泛的,一般我们常说的集成学习的方法都是指的同质个体学习器。而同质个体学习器使用最多的模型是CART决策树和神经网络。同质个体学习器按照个体学习器之间是否存在依赖关系可以分为两类:

  1. 第一个是个体学习器之间存在强依赖关系,一系列个体学习器基本都需要串行生成,代表算法是Boosting系列算法;
  2. 第二个是个体学习器之间不存在强依赖关系,一系列个体学习器可以并行生成,代表算法是Bagging和随机森林(Random Forest)系列算法。

集成学习之Boosting

Boosting的算法原理图如下:

从图中可以看出,Boosting算法的工作机制是首先从训练集用初始权重训练出一个弱学习器1,根据弱学习的学习误差率表现来更新训练样本的权重,使得之前弱学习器1学习误差率高的训练样本点的权重变高,让这些误差率高的点在后面的弱学习器2中得到更多的重视。然后基于调整权重后的训练集来训练弱学习器2.,如此重复进行,直到弱学习器数达到事先指定的数目T,最终将这T个弱学习器通过集合策略进行整合,得到最终的强学习器。
Boosting系列算法里最著名算法主要有AdaBoost算法和提升树(boosting tree)系列算法。提升树系列算法里面应用最广泛的是梯度提升树(Gradient Boosting Tree)。

集成学习之Bagging

Bagging的算法原理和 Boosting不同,它的弱学习器之间没有依赖关系,可以并行生成,原理图如下:

从上图可以看出,bagging的个体弱学习器的训练集是通过随机采样得到的。通过T次的随机采样,我们就可以得到T个采样集,对于这T个采样集,我们可以分别独立的训练出T个弱学习器,再对这T个弱学习器通过集合策略来得到最终的强学习器。
详细算法过程描述如下:

  1. 从原始样本集中抽取训练集。每轮从原始样本集中使用Bootstraping的方法抽取n个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中)。共进行k轮抽取,得到k个训练集。(k个训练集之间是相互独立的)
  2. 每次使用一个训练集得到一个模型,k个训练集共得到k个模型。(注:这里并没有具体的分类算法或回归方法,我们可以根据具体问题采用不同的分类或回归方法,如决策树、感知器等)
  3. 分类问题:将上步得到的k个模型采用投票的方式得到分类结果;对回归问题,计算上述模型的均值作为最后的结果。(所有模型的重要性相同)

**随机森林(RF)**是bagging的一个特化进阶版,所谓的特化是因为随机森林的弱学习器都是决策树。所谓的进阶是随机森林在bagging的样本随机采样基础上,又加上了特征的随机选择。
对于Bagging需要注意的是,每次训练集可以取全部的特征进行训练,也可以随机选取部分特征训练,例如随机森林就是每次随机选取部分特征

集成学习之结合策略

  1. 平均法
    对于数值类的回归预测问题,通常使用的结合策略是平均法,也就是说,对于若干个弱学习器的输出进行平均得到最终的预测输出。

最简单的平均是算术平均,也就是说最终预测是
H ( x ) = 1 T <munderover> 1 T </munderover> h i ( x ) H(x) = \frac{1}{T}\sum\limits_{1}^{T}h_i(x) H(x)=T11Thi(x)

如果每个个体学习器有一个权重w,则最终预测是
H ( x ) = <munderover> i = 1 T </munderover> w i h i ( x ) H(x) = \sum\limits_{i=1}^{T}w_ih_i(x) H(x)=i=1Twihi(x)
其中wi是个体学习器hi的权重,通常有
w i 0 , &ThickSpace;&ThickSpace;&ThickSpace; <munderover> i = 1 T </munderover> w i = 1 w_i \geq 0 ,\;\;\; \sum\limits_{i=1}^{T}w_i = 1 wi0,i=1Twi=1

  1. 投票法

对于分类问题的预测,我们通常使用的是投票法。假设我们的预测类别是 c 1 , c 2 , . . . c K {c_1,c_2,...c_K}​ c1,c2,...cK,对于任意一个预测样本x,我们的T个弱学习器的预测结果分别是 ( h 1 ( x ) , h 2 ( x ) . . . h T ( x ) ) (h_1(x),h_2(x)...h_T(x)) (h1(x),h2(x)...hT(x))

最简单的投票法是相对多数投票法,也就是我们常说的少数服从多数,也就是T个弱学习器的对样本x的预测结果中,数量最多的类别ci为最终的分类类别。如果不止一个类别获得最高票,则随机选择一个做最终类别。

稍微复杂的投票法是绝对多数投票法,也就是我们常说的要票过半数。在相对多数投票法的基础上,不光要求获得最高票,还要求票过半数。否则会拒绝预测。

更加复杂的是加权投票法,和加权平均法一样,每个弱学习器的分类票数要乘以一个权重,最终将各个类别的加权票数求和,最大的值对应的类别为最终类别。

  1. 学习法

前2种方法都是对弱学习器的结果做平均或者投票,相对比较简单,但是可能学习误差较大,于是就有了学习法这种方法,对于学习法,代表方法是stacking,当使用stacking的结合策略时, 我们不是对弱学习器的结果做简单的逻辑处理,而是再加上一层学习器,也就是说,我们将训练集弱学习器的学习结果作为输入,将训练集的输出作为输出,重新训练一个学习器来得到最终结果

在这种情况下,我们将弱学习器称为初级学习器,将用于结合的学习器称为次级学习器。对于测试集,我们首先用初级学习器预测一次,得到次级学习器的输入样本,再用次级学习器预测一次,得到最终的预测结果。

对比Bagging和Boosting

  1. 样本选择上:

**Bagging:**训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。

**Boosting:**每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。

  1. 样例权重:

**Bagging:**使用均匀取样,每个样例的权重相等

**Boosting:**根据错误率不断调整样例的权值,错误率越大则权重越大。

  1. 预测函数:

**Bagging:**所有预测函数的权重相等。

**Boosting:**每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。

  1. 并行计算:

**Bagging:**各个预测函数可以并行生成

**Boosting:**各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。

  1. 偏差和方差

Bagging:主要关注降低偏差(bias),因为他更加关注分类错误的样本

Boosting:更加关注降低方差(variance),因为他不容易受极值点影响
详细的解释可参考Bagging和Boosting的区别
偏差相当于预测准确性,而方差相当于预测稳定性,下图就能明显的说明偏差和方差。

总结

参考资料
Bagging,Boosting,Stacking
Bagging和Boosting的区别