一、集成学习算法简介
学习西瓜书笔记。
集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务。如何产生“好而不同”的个体学习器,是集成学习研究的核心。
根据个体学习器的生成方式,可以将集成学习方法大致分为两大类:
- 1、个体学习器间存在强依赖关系、必须串行生成的序列化方法。
比如boosting族算法,代表性的有adaboost算法,GBDT。 - 2、个体学习器之间不存在强依赖关系、可同时生成的并行化方法。
比如bagging和“随机森林”。
这篇文章大致介绍一下boosting算法中的adaboosting算法,以及bdgging和“随机森林”。
二、从boosting到adaboost
2.1 boosting族算法的基本步骤
boosting是一族可将弱学习器提升为强学习器的算法,这族算法的工作机制类似:
- 先从初始训练集训练出一个基学习器;
- 再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注;
- 基于调整后的样本分布来训练下一个基学习器;
- 重复进行上述步骤,直至基学习器数目达到事先指定的值T,最终将这T个基学习器进行加权结合。
2.2 boosting族算法的代表AdaBoost算法
可以通过加性模型的推导(基学习器的线性组合),来理解AdaBoost算法 。
下面只是简单的讲述一下AdaBoost算法步骤,推导可以看资料(统计学习方法或者西瓜书)。
步骤:
第一个及分类器h1是通过直接将基学习算法用于初始数据分布而得;此后迭代的生成hi和αi。
第一步:Dx = 1/m,初始化样本权值的分布。
循环:
- 1、基于分布D训练出分类器ht。
- 2、估计出误差ε。
- 3、用上一步得到的误差计算权重αt,(每加上一个αtht,都是以最小化当前损失函数为目的。)
- 4、由西瓜书,令损失函数求导再为0,可以得到权重的计算公式(由误差 ε 表示。)
- 5、在获得第t-1个基学习器ht-1之后,样本分布将进行调整,使下一轮的基学习器ht能够纠正ht-1的一些错误。理想的ht能够纠正上一个分类器的全部错误。
(中间也用到了泰勒展开)即最小化目标函数。于是,获得了新的样本的分布Dt - 6、返回第1步。
注意AdaBoost算法每一轮都要判断当前基学习器是否满足条件,一旦条件不满足,则当前学习器被抛弃,且学习过程停止。
2.3 注重减小偏差的AdaBoost算法
AdaBoost算法中的个体学习器存在着强依赖关系,应用的是串行生成的序列化方法。每一个基生成器的目标,都是为了最小化损失函数。所以,可以说AdaBoost算法注重减小偏差。
2.4 AdaBoost算法的缺点
由于属于boosting算法族,采用的是加性模型,对每个基学习器的输出结果加权处理,只会得到一个输出预测结果。所以标准的AdaBoost只适用于二分类任务。
三、Bagging 算法
上节提到,AdaBoost算法注重减小偏差,因此可能会有比较大的方差,泛化能力不强。
为了得到泛化能力强的集成,集成中的个体学习器应该尽可能的相互独立。
尽管独立可能无法做到,但是可以设法使基学习器有较大的差异。那么怎么做到呢?
一种方法是从训练样本上考虑:
对训练样本进行采样,产生出若干个不同的子集,再从每个数据子集中训练出一个基学习器,这样,由于训练数据不同,我们获得的基学习器可望具有比较大的差异。
但又不能每个基学习器的训练样本都完全不同,这样不足以进行有效学习。
于是让每个个体学习器在采样得到的相互有交叠的采样子集上进行训练。
3.1 bagging算法步骤
每训练一次,有放回采样m个样本,然后再训练出一个基学习器,再将这些基学习器结合。这就是bagging的基本流程。
3.2 bagging算法怎么输出预测
不同于boosting算法族中,采用加性模型,对每个基学习器的输出结果加权处理,对于预测只有一个确定的值。
bagging中每个基学习器有较大的差异,那么每个基学习器输出的预测结果可能也有较大的差异,所以需要有一定的策略来对每个基学习器的结果综合运用。
对于t个结果,bagging通常对分类任务采用简单投票法,对回归任务使用简单平均法。
3.3 bagging算法的优点
与标准的adaboost只适用于二分类任务不同,bagging能不经修改地用于多分类、回归任务。
3.4 注重降低方差的bagging算法
因为bagging的每个基学习器差异比较大,泛化能力强,所以bagging算法主要关注降低方差。因此,它在不减枝决策树、神经网络等易受扰动得到学习器上效用更为明显。
四、随机森林(RF)
RF也属于集成学习中的第二大类:个体学习器间不存在强依赖关系、可同时生成。
4.1 为什么叫随机森林?
- 森林:因为基学习器是一组决策树啊。。。
- 随机:在决策树的训练过程中引入了随机属性选择啊。。。
4.1 从bagging到随机森林
随机森林是bagging的一个扩展变体,相对于bagging有两点不同:
- 1、RF的每个基学习器都是决策树;
- 2、在构建bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。
4.2 随机森林基学习器的学习方法
假设当前节点还有d个属性待划分,对基决策树的每个节点先从该节点的属性集合d中随机选择一个包含k个属性的子集,再进行划分。
当k=d时,就是传统的决策树。当k=1时,就是随机选择一个属性用于划分。
一般推荐k = log2d。
4.3 随机森林的优点
随机森林中基学习器的多样性,不仅来自样本扰动,还来自属性扰动,这就使得最终集成的泛化性能可通过个体学习器之间差异度的增加而进一步提升。
五、从结合策略到Stacking学习法
集成学习的第二类模型,为了提高集成的泛化能力,每个基学习器之间不存在很强的依赖性,所以最终预测结果时,需要一定的策略对T个结果进行结合。下面介绍结合策略。
5.1 、平均法
对数值型输出,最常见的结合策略是使用平均法。
- 简单平均法
- 加权平均法
但是对于规模比较大的集成来说,权重参数比较多,较容易导致过拟合。加权平均法未必一定优于简单平均法。
一般而言,在个体学习器性能相差较大时,宜使用加权平均法,而在个体学习器性能相近时,宜使用简单平均法。
这一点在第二个项目中深有体会,该模型有三个损失函数,每个损失函数的性能差别比较大,所以用了加权,在第一个数据集中调好参数以后,在第二个数据集中,效果就不是很好,需要重新进行调参。
5.2 投票法
- 绝对多数投票法
若某标记得票过半数,则预测为该标记;否则拒绝预测。 - 相对多数投票法
预测为得票最多的标记。若同时有多个标记获得最高票,则从中随机选取一个。 - 加权投票法
5.3 学习法
当训练数据很多时,一种更为强大的结合策略是使用“学习法”,即通过另一个学习器来进行结合。
Stacking本身是一种著名的集成学习方法,且有不少集成学习算法可是为其变体或特例,它也可以看作是一种特殊的结合策略,因此在此介绍。
我们把个体学习器成为初级学习器,用于结合的学习器成为次级学习器(或元学习器)。
Stacking先从初始数据及训练出初级学习器,然后“生成”一个新数据集,用于训练次级学习器。在这个新数据集中,初级学习器的输出被当做样例输入特征,而原始样本的标记仍被当做样例标记。
对于Stackin的一些深入了解,这里不进行过多介绍。