集成学习ensemble learning
是通过构建并结合多个学习器来完成学习任务。其一般结构为:
先产生一组“个体学习器”(individual learner
) 。个体学习器通常由一种或者多种现有的学习算法从训练数据中产生。
如果个体学习器都是从某一种学习算法从训练数据中产生,则称这样的集成学习是同质的homogenerous
。
此时的个体学习器也称作基学习器base learner
,相应的学习算法称作基学习算法。
如果个体学习器是从某几种学习算法从训练数据中产生,则称这样的集成学习是异质的heterogenous
。
再使用某种策略将它们结合起来。集成学习通过将多个学习器进行组合,通常可以获得比单一学习器显著优越的泛化性能。
通常选取个体学习器的准则是:
通常基于实际考虑,往往使用预测能力较强的个体学习器(即强学习器,与之对应的为弱学习器)。
强学习器的一个显著的好处就是可以使用较少数量的个体学习器来集成就可以获得很好的效果。
根据个体学习器的生成方式,目前的集成学习方法大概可以分作两类:
Boosting
为代表。Bagging
和随机森林Random Forest
为代表。考虑一个二类分类问题。设单个样本为 ,真实类别为 。
假定基类分类器的错误率为 ,即对每个基分类器 有: 。
假设集成学习通过简单投票法结合 个基分类器 。即:若有超过半数的基分类器正确,则集成分类就正确。根据描述,给出集成学习器为: 。
集成学习器预测错误的条件为: 个基分类器预测正确,其中 (即:少于一半的基分类器预测正确), 个基分类器预测错误。
假设基分类器的错误率相互独立,则集成学习器预测错误的概率为: 。
根据Hoeffding
不等式有: 。
可以看出:随着 , 集成学习器预测错误的概率 。
上述推论有非常关键的一个地方:假设基分类器的错误率相互独立。
实际上个体学习器是为了解决同一个问题训练出来的,而且可能是同一类算法从同一个训练集中产生。
这样个体学习器的错误率显然不能相互独立。
实际上个体学习器的准确性和多样性本身就存在冲突。
提升方法(boosting
) 是一种常用的统计学习方法。在分类问题中,它通过改变训练样本的权重学习多个分类器,并将这些分类器们进行线性组合来提高分类的能力。
提升方法的基本思想是:对于一个复杂任务来说,将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独的判断要好。类似于”三个臭皮匠顶一个诸葛亮“。
提升方法的理论基础是:强可学习与弱可学习是等价的。
在概率近似正确(probably approximately correct,PAC
)学习的框架下:
可以证明:强可学习与弱可学习是等价的。
即:若在学习中发现了 ”弱学习算法“ ,则可以通过某些办法将它提升为 ”强学习算法“。
对于分类问题而言,求一个比较粗糙的分类规则(弱分类器)要比求精确的分类规则(强分类器)要容易得多。
Boosting
就是一族可以将弱学习器提升为强学习器的算法。
这族算法的工作原理类似:
M
。M
个基学习器进行加权组合。Boosting
族算法最著名的代表是AdaBoost
算法。
AdaBoot
算法两个核心步骤:
每一轮中如何改变训练数据的权值?
AdaBoost
算法提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值。
于是那些没有得到正确分类的数据由于权值的加大而受到后一轮的弱分类器的更大关注。
最后如何将一系列弱分类器组合成一个强分类器?
AdaBoost
采用加权多数表决的方法:
AdaBoost
算法有两个特点:
不改变所给的训练数据,而不断改变训练数据权值的分布,使得训练数据在基本分类器的学习中起不同作用。
AdaBoost
要求基本学习器能够对特定的数据分布进行学习,这一般是在学习的时候为每个训练样本赋予一个权重。利用基本分类器的线性组合 构成最终分类器:
其中:
AdaBoost
算法具有自适应性,即它能够自动适应弱分类器各自的训练误差率,这也是它的名字(适应的提升)的由来。
AdaBoost
算法:
输入:
输出:集成分类器
算法步骤:
初始化训练数据的权值分布 。
对
使用具有权值分布 的训练数据集学习,根据输入的弱学习算法得到基本分类器: 。
计算 在训练数据集上的分类误差率: 。
它就是所有误分类点的权重之和。其中权重越大的误差分类点,其在误差率中占比越大。
若 ,算法终止,构建失败!
计算 的系数: 。
该系数表示 在集成分类器中的重要性。它是 的单调减函数,说明误差越小的基本分类器,其重要性越高。
根据系数大于零要求 。
更新训练数据集的权值分布: 。其中:
为规范化因子,它使得 成为一个概率分布 。
构建基本分类器的线性组合: ,于是得到集成分类器: 。
为防止过拟合,AdaBoost
通常会加入正则化项。该正则化项称作步长或者学习率,定义为 。
考虑正则化项之后,模型的更新方式为: 。
AdaBoost
提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值。
这是通过更新训练数据集的权值分布 来实现的。其中:
两者比较,误分类样本的权重是正确分类样本的权重的 倍。于是误分类样本在下一轮学习中权重更大。
集成分类器 结合 个基本分类器的方式为加权表决。
系数 表示了基本分类器 的重要性。其中:
由于 是分类误差率 的单调递减函数,因此:
AdaBoost
加大分类误差率较小的弱分类器的权值,使得它在表决中起较大作用。AdaBoost
减小分类误差率较大的弱分类器的权值,使得它在表决中起较小的作用。定理一:AdaBoost
算法集成分类器的训练误差上界为:
这一定理说明:可以在每一轮选取适当的 使得 最小,从而使得训练误差下降最快。
定理二:二类分类 AdaBoost
的训练误差界:
其中 。
推论:若存在 ,对所有 有 ,则有:
这表明在此条件下 AdaBoost
的训练误差是以指数速率下降的。
上述定理都只是关于训练误差的分析,实际应用中更关系测试集的误差。
AdaBoost
算法也会出现过拟合,此时训练误差为 0 但是测试集的误差较大。
当AdaBoost
的基础分类器比较复杂时,AdaBoost
很容易陷入过拟合。
但是当AdaBoost
的基础分类器比较简单时,AdaBoost
反而难以陷入过拟合。这也是为什么AdaBoost
的基础分类器经常选择使用树桩的原因。
标准的AdaBoost
算法只适用二类分类问题,可以将它推广到多分类问题。 有两种算法:
SAMME
算法:该算法不需要个体分类器输出类别的概率。SAMME.R
算法:该算法需要个体分类器输出类别的概率。SAMME
算法:
输入:
输出:集成分类器
算法步骤:
初始化训练数据的权值分布 。
对
使用具有权值分布 的训练数据集学习,根据输入的弱学习算法得到基本分类器: 。
计算 在训练数据集上的分类误差率: 。
计算 的系数: 。
因为系数 ,因此要求 。
更新训练数据集的权值分布: 。其中:
其中 为规范化因子,它使得 成为一个概率分布。
构建基本分类器的线性组合,于是得到集成分类器: 。
当 时SAMME
算法退化为标准的AdaBoost
算法。
SAMME.R
算法:
输入:
输出:集成分类器
算法步骤:
初始化训练数据的权值分布 。
对
使用具有权值分布 的训练数据集学习,根据输入的弱学习算法得到基本分类器: 。
计算 在训练数据集上的加权概率估计:
其中:
对 和类别 ,定义:
它刻画了: 预测的输出类别为 的概率加权值的对数 ,距离所有概率加权值对数的均值 的距离。
更新训练数据集的权值分布: 。其中:
归一化训练数据集的权值分布 ,使得权值之和为 1 。
构建基本分类器的线性组合,于是得到集成分类器: 。
Adaboost
的回归问题有很多变种,这里介绍AdaBoost R2
算法。
AdaBoost R2
回归算法:
输入:
输出:集成回归器
算法步骤:
初始化训练数据的权值分布 。
对
使用具有权值分布 的训练数据集学习,根据输入的弱学习算法得到基本回归器: 。
计算 在训练数据集上的误差:
它就是所有样本的回归误差的加权和。
其中 为误差绝对值的最大值,通过它来对所有的回归误差归一化。
计算 的系数: 。
该系数表示 在集成回归器中的重要性。
它是 的单调减函数,说明误差越小的基本回归器,其重要性越高。
更新训练数据集的权值分布: 。其中:
为规范化因子,它使得 成为一个概率分布 。
构建基本回归器的线性组合 ,于是得到集成回归器: 。
AdaBoost
算法可以认为是:模型为加法模型、损失函数为指数函数、学习算法为前向分步算法的二类分类学习方法。
其中指数损失函数为: 。
考虑加法模型 ,其中 为基函数、 为基函数的参数、 为基函数的系数。
给定训练数据以及损失函数 的条件下,根据经验风险极小化(即:损失函数极小化)准测来学习加法模型 :
这是个复杂的最优化问题,通常可以采用前向分步算法求解。
前向分步算法求解这一优化问题的思想是:因为学习的是加法模型,如果能够从前向后,每一步只学习一个基函数及其系数,逐步逼近优化目标函数,则可以简化优化的复杂度。
具体地,每一步只需要优化如下的损失函数: 。
前向分步算法:
输入:
输出:加法模型
算法步骤:
初始化
对
最终加法模型 。
Bagging
直接基于自助采样法bootstrap sampling
。
自助采样法的步骤是:给定包含 个样本的数据集:
初始训练集中有的样本在采样集中多次出现,有的则从未出现。一个样本始终不在采样集中出现的概率是 。
根据 ,因此初始训练集中约有 63.2% 的样本出现在了采样集中。
自助采样法给Bagging
算法带来了额外的优点:由于每个基学习器只用初始训练集中约 63.2% 的样本来训练,剩下的约 36.8% 的样本可用作验证集来对泛化性能进行包外估计。
Bagging
的基本流程:
在使用 Bagging
学习器进行预测时:
从偏差-方差分解
的角度来看:
Bagging
主要关注降低方差,它能平滑强学习器的方差。
因此它在非剪枝决策树、神经网络等容易受到样本扰动的学习器上效果更为明显。
Boosting
主要关注降低偏差,它能将一些弱学习器提升为强学习器。
因此它在SVM
、knn
等不容易受到样本扰动的学习器上效果更为明显。
随机森林Random Forest:RF
是Bagging
的一个扩展变体。
随机森林对Bagging
做了小改动:
Bagging
中基学习器的“多样性”来自于样本扰动。样本扰动来自于对初始训练集的随机采样。
随机森林中的基学习器的多样性不仅来自样本扰动,还来自属性扰动。
这就是使得最终集成的泛化性能可以通过个体学习器之间差异度的增加而进一步提升。
随机森林在以决策树为基学习器构建Bagging
集成模型的基础上,进一步在决策树的训练过程中引入了随机属性选择。
传统决策树在选择划分属性时,是在当前结点的属性集合(假定有 个属性)中选择一个最优属性。
随机森林中,对基决策树的每个结点,先从该结点的属性集合中随机选择一个包含 个属性的子集,然后再从这个子集中选择一个最优属性用于划分。
随机森林的优点:
随着树的数量的增加,随机森林可以有效缓解过拟合。因为随着树的数量增加,模型的方差会显著降低。
但是树的数量增加并不会纠正偏差,因此随机森林还是会有过拟合。
学习器组合可以能带来好处:
由于学习任务的假设空间往往很大,可能有多个假设在训练集上达到同等性能。
此时如果使用单学习器可能因为造成误选而导致泛化性能不佳,通过学习器组合之后会减小这一风险。
学习算法往往会陷入局部极小。有的局部极小点所对应的泛化性能可能很差,而通过学习器组合之后可降低陷入糟糕局部极小的风险。
某些学习任务的真实假设可能不在当前学习算法所考虑的假设空间中,此时使用单学习器肯定无效。
通过学习器组合之后,由于相应的假设空间有所扩大,有可能学得更好的近似。
假定集成包含 个基学习器 。一共有三种集成策略:
平均法通常用于回归任务中。
简单平均法: 。
加权平均法:
其中学习器 的权重 是从训练数据中学的。
现实任务中训练样本通常不充分或者存在噪声,这就使得学得的权重不完全可靠。尤其是对于规模比较大的集成学习,要学习的权重比较多,很容易出现过拟合。
因此实验和应用均显示出,加权平均法不一定优于简单平均法。
通常如果个体学习器性能相差较大时,适合使用加权平均法;个体学习器性能相差较近时,适合使用简单平均法。
投票法通常用于分类任务中。
绝大多数投票法:若某个标记得票数过半,则预测为该标记;否则拒绝预测。
此时很有可能所有标记都未过半,则预测失败。因此这种方法比较少用。
相对多数投票法:选取得票最多的标记作为预测值: 。
加权投票法:类似于加权平均法,其中学习器 的权重 是从训练数据中学的: 。
学习法中,个体学习器的分类结果通过与另一个学习器来组合。
此时称个体学习器为初级学习器,用于组合的学习器称作次级学习器或者元学习器meta_learner
。
学习法的典型代表就是stacking
集成算法。stacking
集成算法中:
首先从初始数据集训练出初级学习器。
然后将初级学习器的预测结果作为一个新的数据集用于训练次级学习器。
在这个新数据集中,初级学习器的输出被当作样本输入特征;初始样本的标记仍被视作标记。
若直接使用初级学习器的输出来产生次级训练集,则容易发生过拟合。
一般是通过使用交叉验证,使用训练初级学习器时未使用的样本来产生次级学习器的训练样本。
次级学习器的输入属性表示和次级学习算法对stacking
集成算法的泛化性能有很大影响。通常推荐:
Multi-response Linear Regression:MLR
。假定有 个个体学习器 ,通过加权平均法组合产生集成学习器 来完成回归学习任务。即: 。
对于某个样本 ,定义学习器 的分歧ambiguity
为: 。
分歧刻画了个体学习器在某个样本 上的不一致性,在一定程度上反映了个体学习器的多样性。
定义集成学习器的分歧为 : 。
设样本 的真实标记为 ,则个体学习器 和集成学习器 的平方误差分别为:
令个体学习器误差的加权均值为: 。根据 ,则有:
令 为样本的概率密度。则在全样本上有:
代入各变量,则有:
定义个体学习器 在全体样本上的泛化误差和分歧项为:
定义集成的泛化误差为: 。则有: 。
定义个体学习器泛化误差的加权均值为 。定义个体学习器的加权分歧值为 。则有: 。这就是集成学习的误差-分歧分解。
该式针对回归学习,难以直接推广到分类学习任务中去。
该式难以直接作为优化目标,因为现实任务中很难直接对 进行优化:
从误差-分歧分解中看出:要想降低集成学习的泛化误差 ,要么提高个体学习器的加权分歧值 ,要么降低个体学习器的泛化误差的加权均值 。
因此:个体学习器准确性越高、多样性越大,则集成越好。
多样性度量diversity measure
是用于刻画集成模型中的个体分类器的多样性的程度。通常是考虑个体分类器的两两相似/不相似程度。
给定数据集 。考虑分类器 的预测结果联表contingency table
为:
其中:
根据定义有:
不合度量disagreement measure
: 。
其范围为 [0,1]
,值越大则多样性越大 。
相关系数correlation coefficient
: 。
其范围是 [-1,+1]
。
Q
统计量Q-statistic
: 。
与相关系数 符号相同,且
统计量 (-statistic): 。
其中:
是两个分类器取得一致的概率: 。
根据:
所以 刻画了两个分类器取得一致的概率。
是两个分类器偶然达成一致的概率: 。
根据:
如果假设 与 相互独立,则 :
所以 刻画了假设两个分类器的预测结果相互独立,则两个分类器取得一致的概率。
的取值:
若两个分类器在数据集 上完全一致,则 。
因为此时 ,则 。
如果两个分类器仅仅是偶然达成一致,则 。
因为此时 ,则 。
通常 取非负值,仅在 与 达成一致的概率甚至低于偶然性的情况下才取负值。
集成学习中,需要有效地生成多样性较大的个体学习器。
一般的思路是在学习过程中引入随机性。常见的做法是:对数据样本、输入属性、输出表示、算法参数进行扰动。
数据样本扰动:给定初始数据集,可以从中产生出不同的数据子集。再利用不同的数据子集训练出不同的个体学习器。
数据样本扰动通常是基于采样法,此类做法简单高效、使用最广。
对于常见的基学习器,如决策树、神经网络等,训练样本稍加变化就会导致学习器有显著的变动,数据样本扰动法对这样的“不稳定基学习器”很有效。
对于一些基学习器对数据样本的扰动不敏感,如线性学习器、支持向量机、朴素贝叶斯、 近邻学习器等,这样的基学习器称作稳定基学习器。
对于此类的基学习器进行集成往往需要使用输入属性扰动等其他机制。
输入属性扰动:训练样本通常由一组属性描述,不同的“子空间”提供了观察数据的不同视角。显然从不同子空间训练出来的个体学习器必然有所不同。
对于包含了大量冗余属性的数据,在子空间中训练个体学习器不仅能够产生多样性大的个体,还会因为属性数量的减少而大幅节省时间开销。
同时由于冗余属性多,减少一些属性之后训练的个体学习器也不至于太差。
对于只包含少量属性的数据,或者冗余属性较少,则不宜采用输入属性扰动法。
输出表示扰动:此类做法的思路是对输出表示进行操纵以增强多样性。
如:可以对训练样本的类标记稍作变动,如翻转法Flipping Output
随机改变一些训练样本的标记。
算法参数扰动:基学习算法一般都有超参数需要设置。可以通过随机设置不同的超参数,从而产生差别较大的个体学习器。
使用单一学习器时通常需要使用交叉验证等方法来确定最佳的超参数值。这种做法实际上是用了不同的超参数训练出来了多个学习器,只不过最终挑选出来效果最好的那个学习器来使用。
集成学习则是相当于把所有这些学习器都利用起来。
不同的多样性增强机制可以同时使用。如随机森林同时是用了数据样本扰动和输入属性扰动。