集成学习基于这样一种思想:对于一个复杂的任务来说,将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独判断的好。实际上,就是“三个臭皮匠顶一个诸葛亮”的道理。
历史上,Kearns和Varliant首先提出了“强可学习”和弱可学习的概念。在概率近似正确的学习框架中,一个概念,如果存在一个多项式的学习算法能够学习它,并且正确率都很高,那么就称这个概念是强可学习的。如果学习的正确率仅比随机猜测略好,那么就称这个概率是弱可学习的。Schapire后来证明强可学习和弱可学习是等价的。
集成学习(ensemble learning)通过构建多个学习器来完成学习任务,有时也被称为多分类器系统,基于委员会的学习等。
集成学习的一般结构:先产生一组“个体学习器”,再用某种策略将它们结合起来。个体学习器通常由一个现有的学习算法从训练数据产生,例如C4.5决策树算法、BP神经网络等,此时集成学习中只包含同种类型的个体学习器,例如:决策树集成,全是决策树。这样的集成是“同质”的。同质集成中的个体学习器也称“基学习算法”。异质集成中的个体学习器由不同的学习算法生成,相应的个体学习器一般称为“组件学习器”。
根据个体学习器的生成方式,目前的集成学习大致可分为两大类,即个体学习器间存在强依赖关系,必须串行生成的序列化方法,如Boosting。以及个体学习器间不存在强依赖关系,可同时生成并行化方法,如Bagging和“随机森林(Random forest)”
一、Boosting
Boosting最有代表学性的是AdBoost算法。
对于分类问题而言,给定一个训练样本集,求比较粗糙的分类规则(弱分类器)要比求精确的分类规则(强分类器)容易得多。提升方法就是从弱学习算法出发,反复学习,得到一系列弱分类器(又称基本分类器),然后组合这些弱分类器,构成一个强分类器。大多数提升方法都是改变训练数据的概率分布(训练数据的权值分布),针对不同训练数据调用学习算法----一系列弱分类器。
对提升方法,有两类问题需要回答:
- 每一轮如何概率训练数据的权值或概率。Adaboost的做法是:提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类的权值。那些没有得到正确分类的数据,由于权值的加大而受到后一轮的弱分类器的更大关注。
- 如何将弱分类器组合成一个强分类器。Adaboot采用加权多数表决法,加大分类误差率小的弱分类器的权值,减小分类误差率大的弱分类器的权值。
AdaBoost算法
假定给定一个二分类的训练数据集
AdaBoost利用以下算法,从训练数据中学习一系列弱分类器或基本分类器,并将这些弱分类器线性组合成一个强分类器
Adaboost算法详解
(1) 初始化训练数据的权值分布
(2)对
(a)使用具有权值分布的训练数据集学习,得到基本分类器
(b)计算在训练数据集上的分类误差率
表示第m轮中第i个实例的权值,。这表明,在加权的训练数据集上的分类误差率是被误分类样本的权值之和。
(c)计算的系数
表示在最终分类器中的重要性,当,并且随着的减少而增大,所以分类误差率越小的基本分类器在最终分类器的作用越大。
(d)更新训练数据集的权值分布
这里,是规范化因子
被基本分类器的误分类样本的权重得意扩大,而被正确分类样本的权值却得到缩小。两相比较,误分类样本的权值被放大倍。因此,误分类样本在下一轮学习中起更大的作用。不改变所给的训练数据,而不断改变训练数据权值的分布,使得训练数据在基本分类器的学习中不起作用,这是Adaboot的一个特点。
(3)构建基本分类器线性组合
得到最终分类器
利用基本分类器的限线性组合构建最终分类器是AdaBoost的另一个特点。
AdaBoost算法的训练误差分析
AdaBoost最基本的性质是它能在学习过程中不断减少训练误差,即在训练数据集上的分类错误率。
推论1
AdaBoost最终分类器的训练误差的下界为
**
当时,,因而,可直接得到
后半部分的推导需要用到的定义式变形
推导如下
这说明,可以在每一轮选取适当的使对最小,从而使得训练误差下降最快。
推论2
二分类问题AdaBoost的训练误差界
证明 由的公式可得
至于不等于
可先由在x=0的泰勒展开式推导出不等式
推论3
如果存在,对所有m有,则
这证明在此条件下AdaBoost的训练误差是以指数速率下降的
注意,AdaBoost算法不需要下界,具有适应性,它能适应弱分类器各自训练误差率。
提升树
以决策树为基函数的提升方法称为提升树(boosting tree),基本分类器,可以看作是由一个根结点直接连接两个叶结点的简单决策树,即所谓的决策树桩。提升树的模型,可以表示为决策树的加法模型
提升树算法
首先确定初始提升树,第m步的模型是
其中,是当前模型,通过经验风险最小化确定下一个树的参数
由于树是线性组合可以很好地拟合训练数据,即使数据中的输入和输出之间的关系很复杂也是如此,所以提升树是一个高功能的学习算法。回归问题用平方误差损失函数,分类问题用指数损失函数,一般决策问题用一般损失函数。
下面描述回归问题的提升树
已知一个训练数据集如果将输入空间X划分为J个不互相交的区域,并且每个区域上确定输出的常量为,那么树可表示为
其中参数表示树的区域划分和各区域上的常数,J是回归树的复杂度,即叶结点的个数
回归问题提升树使用以下向前分步法
需求解
得到,即第m棵树的参数
当采用平方误差损失函数时
其损失变成
是当前模型拟合数据的残差,对回归问题的提升树算法,只需要简单拟合当前模型的残差。
梯度提升
对一般损失函数,往往每一步优化并不那么容易,Freidman提出了梯度提升(gradient boosting)算法,利用梯度下降法的近似方法,利用损失函数的负梯度在当前模型的值
二、Bagging
Bagging是并行式集成学习方法最著名的代表,基于自助采样法。给定包含m个样本的数据集,我们先随机取出一个样本放入采样集中,再把该样本放回初始数据集,使得下次采样时仍有该样本被可能选中。这样,经过m次操作,我们得到含m个样本的采样集。
我们可采样T个含m个训练样本的数据集,然后基于每个采样集训练出一个基学习器,再将这些基学习器进行结合,这就是Bagging的基本流程。在对预测输出进行评估时,Bagging通常对分类任务使用简单投票法,对回归任务使用简单平均法,若分类问题预测时出现两个类收到同样票数的情形,则最简单的做法就是随机选择一个。
自助提取法给Bagging带来了一个优点:由于每个基学习器只使用了初始训练集中约63.2%的样本,剩下约36.8%的样本可用作验证集来对泛化性进行包外估计(out-of-bag estimate)。
从偏差方差分解角度,Bagging主要关注降低方差。
随机森林
随机森林(Random Forest,简称RF)是Bagging的一个扩展变体,RF在一决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入随机属性选择。在RF中,对基决策树的每个结点,先从该结点的属性集合中随机选择一个包含k个属性的子集,然后在从这个子集中选择一个最优属性用于划分。一般情况下,推荐值为
随机森林中基学习器的多样性不仅来自样本扰动,还来自属性扰动,这使得最终集成的泛化性能可通过个体学习器之间的差异度的增加而进以步提升。
三、结合策略
学习器结合可能会从三个方面带来好处
- 从统计方面看,由于学习任务的假设空间往往很大,可能有多个假设在训练集上达到同等性能,此时若使用单学习器可能因吴选而导致泛化性能不佳,结合器会减小这以风险
- 从计算方面来看,学习算法往往会陷入局部极小,有的局部极小点所对应的泛化性能可能很糟糕,而通过多次运行之后进行结合,可降低陷入糟糕巨神极小点的风险
-
某些学习任务的真实假设可能不在当前学习算法所考虑的假设空间中,此时若使用单学习器则肯定无效,而通过结合多个学习器,由于相应的假设空间有所扩大,有可能学得更好的近似
几种常见的结合策略
1.平均法
- 简单平均法
- 加权平均法
现实任务中的训练样本通常不充分或存在噪声,这将使得学出的全权重不完全可靠,尤其是对规模比较大的集成来说,要学习的权重比较多,较容易出现过拟合。
2.投票法
我们将在样本x上的预测输出表示为一个N维向量,其中是在类别标记上的输出。
- 绝对多数法投票法
若某标记超过半数,则预测为该标记,否则拒绝预测
相对多数投票法
即预测为得票最多的标记,若同时存在多个标记获得最高票,则从中随机选取一个加权投票法
与加权平均类似,是的权重,通常