集成学习的概念
集成学习(ensemble learning)指的是,我们采用多个弱学习进行学习,来替代用一个单一的精密的高效能的学习器对数据进行学习,并且通过一定的手段将这些弱学习器的结果进行整合来完成学习任务的方法,有时也被称为多分类系统(multi-classifier system)、基于委员会的学习(committee-based learning)等。
集成学习通过将多个弱学习器进行结合,常可获得比单一学习器显著优越的泛化性能。这对“弱学习器”尤为明显,因此集成学习的很多理论研究都是针对弱学习器进行的。
个体学习器的概念
个体学习器(individual learner)通常是用一个现有的学习算法从训练数据产生,例如C4.5决策树算法、BP神经网络算法等。此时集成中只包含同种类型的个体学习器,例如“决策树集成”中的个体学习器全是决策树,“神经网络集成”中就全是神经网络,这样的集成是“同质”(homogeneous)的,同质集成中的个体学习器也称为“基学习器”(baselearner),相应的学习算法称为“基学习算法”(baselearning algorithm)。有同质就有异质(heterogeneous),若集成包含不同类型的个体学习器,例如同时包含决策树和神经网络,那么这时个体学习器一般不称为基学习器,而称作“组件学习器”(componentleaner)或直接称为个体学习器。
boosting bagging的概念、异同点
根据个体学习器生成方式的不同,目前的集成学习方法大致可以分为两大类,即个体学习器间存在强依赖关系、必须串行生成的序列化方法,以及个体学习器间不存在强依赖关系、可同时生成的并行化方法;前者的代表是Boosting,后者的代表是Bagging和“随机森林”(Random Forest)。
boosting
首先需要明确一个概念,在概率近似正确(PAC)学习框架中,一个概念(一个类),如果存在一个多项式的学习算法能够学习它,并且正确率很高,那么就称这个概念是强可学习的;一个概念,如果存在一个多项式的学习算法能够学习它,学习的正确率仅比随机猜测略好,那么就称这个概念是弱可学习的。并且可以从理论上面证明,强可学习和弱可学习是等价的。那么问题来了,在学习当中,如何将比较容易发现的“弱学习算法”提升(boosting)为“强学习算法”呢?这便是boosting需要解决的问题。
boosting这族算法的工作机制为:先从初识训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多的关注,然后基于调整后的样本分布训练下一个基学习器;如此重复进行,直到基学习器数据达到事先指定的值 T T T,最终将这 T T T个基学习器进行加权结合。
Boosting族算法最著名的代表是AdaBoost,其描述如下图所示,其中 y i ∈ y_i\in yi∈{-1,+1}, f f f是真实函数。
bagging
为了得到泛化性能强的集成,集成中的个体学习器应尽可能相互独立;虽然“独立”在现实任务中无法做到,但可以设法 使基学习器尽可能具有较大的差异。给定一个训练数据集,一种可能的做法是对训练样本进行采样,产生出若干个不同的子集,再从每个数据子集中训练出一个基学习器。这样,由于训练数据不同,我们获得的基学习器可望具有比较大的差距。
bagging正是借鉴这样的思想,直接基于自助采样法(bootstrap sampling),是并行式集成学习方法最著名的代表。给定包含 m m m个样本的数据集,我们先随机去除一个样本放入采样集当中,再把该样本放回初始数据集,使得下次采样时该样本仍有可能被选中,这样经过 m m m次随机采样操作,我们得到含 m m m个样本的采样集,初始训练集中有的样本在采样集里多次出现,有的从未出现。约63.2%的样本出现在采样集中,而未出现的约36.8%的样本可用作验证集来对后续的泛化性能进行“包外估计”。
根据基学习器的不同,包外估计还有其他用途。当基学习器是决策树时,可以使用包外样本来辅助剪枝,或者用于估计决策树中各个结点的后验概率以辅助对零训练样本结点的处理;当基学习器是神经网络时,可使用包外样本来辅助早期停止来减小过拟合风险。
这样类推,我们可以采用出 T T T个含 m m m个训练样本的采样集,然后基于每个采样集训练出一个基学习器。再将这些基学习器进行结合,针对预测输出任务的不同,分类任务通常使用简单投票法,回归任务通常使用简单平均法,这就是Bagging的基本流程。算法描述如下图所示。
对比
- Bagging的个体学习器不存在强依赖关系,可以同时生成,比较便于并行化计算;Boosting的个体学习器存在强依赖关系,只能串行生成,后续的一些开源算法,比如XGBoost以及LightGBM的并行化都只是建树过程的分布式,学习本身还是串行的;
- 从偏差-方差分解的角度看,Bagging主要关注降低方差,因此它在不剪枝的决策树、神经网络等易受到样本扰动的学习器上效用更明显;Boosting主要关注降低偏差,因此Boosting基于泛化性能相当弱的学习器构建出很强的集成。
- 说说相同的,这两个算法如果采用相同的基学习器,那么算法的时间复杂度是基本相同的。
结合策略
学习器结合策略的好处有以下三个方面:
- 从统计的方面来看,结合多个学习器可以减小因学习任务的假设空间太大导致仅仅使用单学习器可能因误选而导致泛化性能不佳的风险;
- 从计算的方面来看,通过多次运行不同的学习算法之后进行结合可降低陷入糟糕局部极小点的风险;
- 从表示的方面来看,通过结合多个学习器,扩大了相应的假设空间,有可能学得到更好的近视。
平均法
对于数值型输出 h i ( x ) ∈ R h_i(x)\in R hi(x)∈R,最常见的结合策略是使用平均法。
- 简单平均法
H ( x ) = 1 T ∑ i = 1 T h i ( x ) H(x)=\frac{1}{T}\sum_{i=1}^Th_i(x) H(x)=T<