集成学习

发现一篇写的很好的关于集成学习的文章。
本文转载自卢明冬的博客-梯度下降学习率的设定策略

1. 集成学习介绍

集成学习(Ensemble Learning)可以说是机器学习兵器谱上排名第一的“屠龙刀”,是一个非常万能且有效的强大工具。这把“屠龙刀”在各大机器学习竞赛中被广泛使用,曾多次斩下桂冠。集成学习是用多个弱学习器构成一个强学习器,其哲学思想是“三个臭皮匠赛过诸葛亮”,有时也被称为多分类器系统( multi-classifier system )、基于委员会的学习( committee-based learning )、元算法(meta-algorithm)等。
集成方法的研究点集中在使用什么模型以及这些模型怎么被组合起来。
一般的弱学习器可以由Logistic回归,决策树,SVM,神经网络,贝叶斯分类器,K-近邻等构成。集成中的个体学习器可以是相同的算法,可称为同质集成( Homogeneous Ensemble),其中的个体学习器称为“基学习器”( base learner),相应的学习算法称为“基学习算法”( base learning algorithm );集成也可以包含不同类型的算法,可称为异质集成( heterogenous ),个体学习器一般称为“组件学习器”或直接称为个体学习器。个体学习器之间的整合方式,一般有平均法,简单投票,贝叶斯投票,基于D-S证据理论的整合,基于不同的特征子集的整合。

集成学习为什么可以提高学习器的性能?
集成学习可能会从三个方面带来好处[Dietterich, 2000] : 首先从统计的方面来看,由于学习任务的假设空间往往很大,可能有多个假设在训练集上达到同等性能, 此时若使用单学习器可能因误选而导致泛化性能不佳,结合多个学习器则会减小这一风险;第二,从计算的方面来看,学习算法往往会陷入局部极小?有的局部极小点所对应的泛化性能可能很糟糕, 而通过多次运行之后进行结合, 可降低陷入糟糕局部极小点的风险;第三, 从表示的方面来看,某些学习任务的真实假设可能不在当前学习算法所考虑的假设空间中,此时若使用单学习器则肯定无效,而通过结合多个学习器, 由于相应的假设空间有所扩大,有可能学得更好的近似,下图给出了一个直观示意图。
在这里插入图片描述

集成学习把多个学习器结合起来,要想获得比最好的单一学习器更好的性能,个体学习器应“好而不同”,即个体学习器要有一定的“准确性”,即学习器不能太坏,并且要与“多样性”,即学习器间具有差异。然而,我们在集成过程中都会有一个关键假设:基学习器的误差相互独立。但是在现实任务中,个体学习器是为解决同一个问题训练出来的,它们显然不可能相互独立!事实上,个体学习器的“准确性”和“多样性”本身就存在冲突,一般的,准确性很高的时候,要增加多样性就需牺牲准确性,事实上,如何产生并结合“好而不同”的个体学习器,恰是集成学习研究的核心。
根据个体学习器的生成方式,目前的集成学习方法大致可分为两大类,即个体学习器间不存在强依赖关系、可同时生成的并行化方法,代表是Bagging;以及个体学习器问存在强依赖关系、必须串行生成的序列化方法,代表是Boosting 。

2. Bagging

Bagging是Bootstrap Aggregation的缩写,直译为自助汇聚法,其中Bootstrap是指一种有放回式的自助采样法(bootstrap sampling)。Bagging是并行集成学习方法的典型代表,著名的集成学习算法随机森林其实是Bagging的一个扩展变体。
agging[Breiman, 1996a]是为了得到泛化能力强的集成,因而就需要让各个子学习器之间尽可能独立,但是如果将样本分为了不同的不重合子集,那么每个基学习器学习的样本就会不足。所以它采用一种自助采样的方法(boostrap sampling),生成互相有交叠的采样子集。然后对每个采样子集分别进行训练,产生多个具有比较大差异的基学习器,最后使用投票法或平均法获得最终的预测结果。

2.1 Bagging算法过程

1)自助采样
给定包含m个样本的数据集,我们先随机取出一个样本放入采样集中,再把该样本放回初始数据集,使得下次采样时该样本仍有可能被选中,这样,经过m次随机采样操作,我们得到含m个样本的采样集,初始训练集中有的样本在采样集里多次出现,有的则从未出现,初始训练集中约有 63.2%的样本出现在来样集中。
对于自助采样法,我们可以做一个简单的估计,样本再m次采样中始终不被采到的概率是 ( 1 − 1 m ) m (1-\frac{1}{m})^m (1m1)m,m取极限,则为 1 e = 0.368 \frac{1}{e}=0.368 e1=0.368
因此,每次约有36.8%的样本未出现在采样数据集中,将未参与模型训练的数据称为袋外数据(西瓜书中是“包外样本”),它可以用于取代验证测试集用于误差估计,称为袋外估计(out-of-bag,estimate)。Breiman以经验性实例的形式证明袋外估计与同训练集一样大小的测试集精度相同,因此得到的模型参数是无偏估计。另外,如果基学习器是决策树时,可使用袋外数据来辅助剪枝,或用于估计决策树中各结点的后验概率以辅助对零训练样本结点的处理;当基学习器是神经网络时,可使用包外样本来辅助早期停止以减小过拟合风险。

2)训练基学习器
照这样,我们可采样出 T 个含 m 个训练样本的采样集,然后基于每个采样集训练出一个基学习器,再将这些基学习器进行结合。这就是 Bagging 的基本流程。

3)集成
在对预测输出进行结合时,Bagging 通常对分类任务使用简单投票法,对回归任务使用简单平均法。若分类预测时出现两个类收到同样票数的情形,则最简单的做法是随机选择一个,也可进一步考察学习器投票的置信度来确定最终胜者。

2.2 Bagging的特点

1)从偏差-方差分解角度来看,Bagging主要关注降低方差,因此它在不剪枝决策树、神经网络等易受样本扰动的学习器上效用更为明显;

2)Bagging是一个非常高效的集成学习算法,算法复杂度大致为 ?(?(?)+?(?)),其中?(?)为基学习器的计算复杂度,?(?)是采样与投票/平均过程的复杂度,T是训练轮数。一般情况下,?(?)的复杂度较小,?也是一个不太大的常数,因此,训练一个Bagging集成与直接使用基学习算法训练一个学习器的复杂度同阶。

3)Bagging能够不经修改地用于多分类、回归等任务,而Adaboost若不经修改的话,只适用于二分类任务。

2.3 随机森林

1)自助采样
从样本集中用Bootstrap采样选出 ? 个样本。

2)选择随机属性子集
传统决策树在选择划分属性时是在当前结点的属性集合(假定有 ? 个属性)中选择一个最优属性,而在RF中,对基决策树的每个结点,先从该结点的属性集合中随机选择一个包含 ? 个属性的子集,然后再从这个子集中选择一个最优属性用于划分。这里的参数 ? 控制了随机性的引入程度:若令 ?=?,则基决策树的构建与传统决策树相同;若令 ?=1,则是随机选择 一 个属性用于划分; 一 般情况下,推荐值 ?=log2? [Breiman, 2001a]。

3)建立CART决策树
选择最优属性后,用采样样本建立CART决策树。

4)重复
重复以上三步 ?次,即建立了 ? 棵CART决策树。

5)集成
对预测输出进行结合,如分类任务使用多数投票法,对回归任务使用简单平均法。
(1)简单平均法和加权平均法
(2)投票法

  • 绝对多数投票法(majority voting),若某标记得票过半数,则预测为该标记,否则拒绝预测
  • 相对多数投票法(plurality voting),预测为得票最多的标记,若同时有多个标记获得最高票,则从中随机选取一个
  • 加权投票法(weighted voting)
    (3)学习法
    当训练数据很多时,一种更为强大的结合策略是使用“学习法”,即通过另一个学习器来进行结合。Stacking [Wolpert, 1992; Breiman, 1996b]是学习法的典型代表,它本身又是一种著名的集成学习方法,与Bagging和Boosting最大的区别是它可以进行异质集成,即个体学习器可以是多种不同类型的算法。关于Stacking,暂时不在本文介绍,Stacking作为学习法实现集成策略,可参考周志华老师的西瓜书。

2.4 随机森林特点

1)随机森林简单易实现,计算开销小;
2)随机森林在实践应用中表现出强大的性能,被誉为“代表集成学习技术水平的方法”;
3)随机森林的收敛性与 Bagging 相似,起始性能较差,随着个体学习器数目的增加,随机森林通常会收敛到更低的泛化误差。
4)随机森林训练效率常优于Bagging,因为在个体决策树的构建过程中,Bagging使用的是“确定型” 决策树,在选择划分属性时要对结点的所有属性进行考察 ,而随机森林使用的“随机型”决策树则只需考察一个属性子集。
5)除了使用决策树作为个体学习器,随机森林还可以使用SVM、Logistic回归等其他学习器,习惯上,这些学习器组成的“总学习器”,仍然叫作随机森林。

3. Boosting

Boosting 就是著名的提升方法,是一族可将弱学习器提升为强学习器的算法,可用于回归和分类问题。严格来讲提升并不是一种独立算法,而是在已有算法上进行优化的机器学习技术。从偏差-方差分解的角度看, Boosting 主要关住降低偏差,因此 Boosting能基于泛化性能相当弱的学习器构建出很强的集成,从理论上讲,如果一个问题存在弱学习器,则可以通过提升的方法得到强学习器。

提升算法族的工作机制类似:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复进行,直至基学习器数目达到事先指定的值 T ,最终将这 T 个基学习器进行加权结合(通常为线性加权)。
Boosting 算法族著名的代表有AdaBoost [Freund and Schapire, 1997]、GBDT[Friedman, 1999] 以及 XGBoost[Tianqi Chen, 2016]等。

3.1 Adaboost

Adaboost(Adaptive Boost)即自适应提升算法。对提升方法来说,有两个问题需要回答:一是在每一轮如何改变训练数据的权值或概率分布;二是如何将弱分类器组合成一个强分类器。关于第一个问题,AdaBoost的做法是,提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值。这样一来,那些没有得到正确分类的数据,由于其权值的加大而受到后一轮的弱分类器的更大关注。于是,分类问题被一系列的弱分类器“分而治之”。至于第二个问题,即弱分类器的组合,AdaBoost采取加权多数表决的方法。具体地,加大分类误差率小的弱分类器的权值,使其在表决中起较大的作用,减小分类误差率大的弱分类器的权值,使其在表决中起较小的作用。AdaBoost的巧妙之处就在于它将这些想法自然且有效地实现在一种算法里。

从下图(图片源自百度百科Boosting词条)可以看出,从弱分类器出发,每一次分类错误的样本都会增加权重,使得在下一次分类的时候更加关注这些错分样本,如此重复,最后将这些弱分类器组合,构成一个强分类器。这里需要注意的一点是,我们最后需要的强分类器不是通过提升得到的最后一个分类器,而是结合了所有中间的弱分类器,最终构成的强分类器。
在这里插入图片描述

3.2 Adaboost算法过程

1)初始化训练数据的权值分布(直接用均值)
2)对于?=1,2,⋯,?,?为训练轮数。

  • 使用具有权值分布??的训练数据集学习,得到基本分类器 D m ( x ) D_m(x) Dm(x)
  • 计算??(?)在训练数据集上的分类误差率
  • 计算??(?)的系数 a m = 1 2 l n 1 − e m e m a_m=\frac{1}{2}ln\frac{1-e_m}{e_m} am=21lnem1em,当??≤1/2时,??≥0,并且?? 随着??的减小而增大,所以分类误差率越小的基本分类器在最终分类器中的作用越大。
  • 更新训练数据集的权值分布,如下图,当预测值与真实值不同时,会产生负值,与前面的负号作用产生一个大于1的值,这样就起到了增大错误分类权值的效果。
    在这里插入图片描述
  • 构成基本分类器的线性组合
    在这里插入图片描述

3.3 算法推导

Adaboost算法过程步骤其实不难理解,关键在于训练更新过程中,有几处公式出现的莫名其妙,甚至还有指数和对数出现,这就难免会产生以下疑惑:

1)Adaboost的损失函数是什么,为什么后来出现很多带有指数或对数形式的公式?

2)基分类器的系数更新公式 ?? 虽然符合随着误差率的减小而系数越大的基本要求,但为什么要写成这种对数形式的?

3)为什么样本权值的更新公式写那么复杂,还有很多指数形式的公式?

其实上面的问题最关键的原因是Adaboost使用的是指数损失函数,后面的基分类器系数和样本分布更新公式都是按照这个指数损失函数推导而来的,所以会出现自然指数和自然对数。

实际上二分类问题最常用的应该是0-1损失函数,即当预测错误时,损失函数值为1,预测正确时,损失函数值为0。而Adaboost则使用指数损失函数作为0-1损失函数的替代损失函数,通过“加性模型”即基学习器的线性组合来最小化指数损失函数。之所以选择指数损失函数,是因为这个替代函数具有更好的数学性质,比如它是连续可微函数,便于后续的优化推导。替代损失函数是否可以替代,需要证明这个函数与原损失函数的“一致性”,这在周志华老师的西瓜书中有非常详细的证明过程,最终的结果能够达到贝叶斯最优错误率,能够证明指数损失函数最小化,则分类错误率也能最小化,满足经验风险最小化的一致性充要条件,指数损失函数可以作为0-1函数的替代函数。

因此,后面的基学习器和样本分布更新公式都是为了最小化指数损失函数推导得到的,并不是“莫名其妙”而来,在西瓜书中有非常详细的证明推导过程,这里不再复述。
Adaboost 算法之重采样法

Boosting要求基学习器能对特定的数据分布进行学习,则可通过上面提到重赋权法(re-weighting)实施,即在训练过程的每一轮中,根据样本分布为每个训练样本重新赋予一个权重。然而有些基学习器无法接受带权样本,则可通过重采样法(re-sampling)来处理,即在每一轮学习中,根据样本分布对训练集重新进行采样,再用重采样而得的样本集对基学习器进行训练。一般而言,这两种做法没有显著的优劣差别,不过在一些特殊情况中,重采样法还有一些额外的好处。Boosting 算法在训练的每一轮都要检查当前生成的基学习器是否满足基本条件(例如检查当前基分类器是否是比随机猜测好),一旦条件不满足,则当前基学习器即被抛弃,且学习过程停止。在此种情形下,初始设置的学习轮数 T 也许遥远未达到,可能导致最终集成中只包含很少的基学习器而性能不佳。若采用重采样法,则可获得“重启动”机会以避免训练过程过早停止[Kohavi and Wolpert, 1996],即在抛弃不满足条件的当前基学习器之后,可根据当前分布重新对训练样本进行采样,再基于新的采样结果重新训练出基学习器,从而使得学习过程可以持续到预设的 T 轮完成。
Adaboost算法特点
1)Adaboost算法可以认为是模型是加法模型、损失函数为指数损失函数、学习算法为前向分步算法的二类分类学习方法;
前向分步算法的优化思路是:因为学习的是加法模型,如果能够从前向后,每一步只学习一个基函数及其系数,逐步逼近优化目标函数,那么就可以简化优化的复杂度。比如在Adaboost中,前向分步算法将同时求解从?=1到?所有基本分类器??(?)及其系数??的优化问题简化为逐一学习基本分类器及其系数的过程,Adaboost算法是前向分步加法算法的特例。

2)Adaboost的训练误差是以指数速率下降的;

3)Adaboost算法的样本权重和基分类器的权重是交叉更新的;

4)Adaboost算法不需要事先知道每个分类器误差下降的是多少,具有自适应性(Adaptive),它能自适应分类器的训练误差率。

5)Adaboost算法可以使用Logistic回归,决策树,SVM,神经网络,贝叶斯分类器等作为基分类器;

6)Adaboost最初的算法过程仅适用于二分类的分类任务,对于处理多分类或回归任务的情况,需要对Adaboost算法过程进行修改,目前已经有适用的变体算法。

4.1 GBDT

GBDT(Gradient Boosting Decision Tree)称为梯度提升树,也是Boosting族算法之一,在传统机器学习算法里面是对真实分布拟合的最好的几种算法之一。GBDT有很多简称,有GBT(Gradient Boosting Tree)、GTB(Gradient Tree Boosting )、 GBRT(Gradient Boosting Regression Tree)、 MART(Multiple Additive Regression Tree),通常是指的同一种算法,本文统一简称GBDT。

GBDT是从提升树而来,可以说是提升树的升级版本,我们先从提升树说起。
提升树与梯度提升树
提升树(Boosting Tree)是以决策树为基学习器(基函数)的提升方法,个体决策树通常都会使用CART决策树生成算法,对分类问题是二叉决策树,对回归问题是二叉回归树。提升树模型可以表示为决策树的加法模型:
在这里插入图片描述
其中,?(?;??)表示个体决策树,??是每棵树的权重,??为决策树的参数,?为树的个数。注意,这里的??应该只有在二分类问题中退化成Adaboost才会用到,回归提升树以及GBDT中都是通过残差或者伪残差来“度量”与真实样本之间的差距,个人觉得残差和伪残差已经具有了基学习器权重类似的作用,可通过拟合残差和伪残差来实现对基本决策树的关注度的影响和调节。
对于二类分类问题,提升树算法只需将AdaBoost基本分类器限制为二类分类树即可,可以说这时的提升树算法是AdaBoost算法的特殊情况。但是回归问题就不能沿用Adaboost的步骤了,我们需要进行修改。
已知一个训练数据集?={(?1,?1),(?2,?2),⋯,(??,??)},??∈?⊆??,?为输入空间,??∈?⊆?,?为输出空间。如果将输入空间?划分为?个互不相交的区域?1,?2,⋯,??,并且在每个区域上确定输出的常量??,那么树可以表示为:
在这里插入图片描述
未完待续…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值