本次集成学习读书笔记的参考资料除了西瓜书、ISL、统计学习方法外,还加入了Python机器学习(塞巴斯蒂安),里面对adaboost的起源和原始版本作了介绍,并且用简单例子展示了adaboost的工作原理,比西瓜书的海量公式推导更加让人能接受;统计学习方法则从训练误差分析的角度解答了为什么adaboost能够提高学习精度,还从前向分步加法模型的角度解释了adaboost;而之前在ISL的决策树章节中提到的装袋法、随机森林、提升树则是集成学习的具体例子。本篇笔记依然主要按照西瓜书的结构进行,在有必要补充的地方适当补充。
目录
- 集成学习的基本概念和术语
- boosting
- 装袋法、随机森林
- 结合策略
- 多样性
1. 集成学习的基本概念和术语
集成学习(ensemble learning)就是通过构建并结合多个学习器来完成学习任务。
如上图所示,集成学习的一般结构是:先产生一组 个体学习器(individual learner),然后用某种结合策略将它们结合起来。结合过后的学习器常比单一学习器有更好的泛化性能,这对 弱学习器(weak learner)尤为明显,实际上就是“三个臭皮匠顶个诸葛亮”的道理。弱学习器是指泛化性能略优于随机猜测的学习器。
为了让集成后的性能得到提高,要求个体学习器应好而不同:即个体学习器要有一定的准确性,又要有所差异。
由霍夫丁不等式可知,集成的错误率为:
可以看出,随着个体分类器数目T的增大,集成的错误率将指数级下降。但在现实任务中,个体学习器都是为解决同一个问题训练出来的,不可能相互独立,准确性很高之后,要增加多样性就需牺牲准确性,如何产生并结合好而不同的个体学习器,恰是集成学习研究的核心。
根据个体学习器的生成方式,集成学习方法可分为两大类:即个体学习器间存在强依赖关系、必须串行生成的序列化方法,如boosting;以及个体学习器间不存在强依赖关系,可同时生成的并行化方法,如装袋法,随机森林。
2.boosting
boosting是一族可以将弱学习器提升为强学习器的算法。如前所述,boosting中个体学习器间存在强依赖关系,每一个个体学习器都从之前的个体学习器 “脱胎” 而来,具体而言就是根据之前的学习器的表现调整训练集中的样本后再训练当前学习器,对于判断错误的样本增加关注。按这样的规则进行学习器的训练,达到指定数目T后进行加权结合。
先从原始的boosting过程来感受为什么说“脱胎”而来:
可以明显看到弱学习器C2、C3都依赖于之前的学习器。
在boosting族算法中最著名的就是 AdaBoost,它用个体学习器的线性组合(加法模型解释)
来最小化指数损失函数
AdaBoost算法如下图所示:
从AdaBoost的算法也可以看出个体学习器之间的依赖关系,即每个学习器对应的训练集样本的权值是由前一个学习器的表现决定的,对于判断错误的样本要增加权值,对于判断正确的样本要减小权值。对于每一个个体学习器也有对应的权重,当个体学习器数量达到T时,将他们加权结合。
提升树 (boosting tree)方法也属于boosting族算法,只不过它将个体学习器种类限定为决策树。
3.装袋法、随机森林
装袋法(Bagging)、随机森林(Random forest)和提升树方法在决策树的读书笔记中的补充部分已经介绍过,不再赘述,传送门:
https://blog.csdn.net/qq_31075041/article/details/97162620
这两个方法与boosting最大的区别就是个体学习器之间没有强依赖关系,可以同时生成,这从装袋法中用自助法生成不同的自助抽样训练集可以看出,自助抽样训练集之间没有像boosting那样明显的依赖关系,即不用根据前一个学习器的表现来改变自己的状态。
4.结合策略
结合策略指的是如何把个体学习器进行结合得到集成学习器的策略,有三种常见类型:平均法、投票法和学习法。
4.1平均法
对于数值型输出,最常见的结合策略是 平均法(averaging)。
主要的平均法有两种:
简单平均法(simple averaging)
加权平均法(weighted averaging)
可以看出简单平均法是加权平均法的特例。
4.2投票法
分类任务最常见的结合策略是使用 投票法(voting)。为方便讨论,将 h i h_i hi在样本 x x x上的预测输出表示为一个N维向量( h i 1 ( x ) ; h i 2 ( x ) ; . . . ; h i N ( x ) h^1_i(x);h^2_i(x);...;h^N_i(x) hi1(x);hi2(x);...;hiN(x)),其中 h i j ( x ) h^j_i(x) hij(x)是 h i h^i hi在类别标记 c j c_j cj上的输出。
绝对多数投票法(majority voting)
即若某标记得票超过半数,则预测为该标记;否则拒绝预测。
相对多数投票法(plurality voting)
即预测为得票最多的标记,若同时有多个标记获最高票,则随机选择其中一个。
加权投票法(weighted voting)
4.3学习法
学习法就是通过另一个学习算法将个体学习器进行结合的方法。Stacking是学习法的典型代表,我们把个体学习器称为初级学习器,用于结合的学习器称为次级学习器。
Stacking的基本思想是:先从初试训练集训练出初级学习器,然后生成一个新数据集用于训练次级学习器。新数据集中,初级学习器的输出被当做输入特征,初始样本的标记仍被当做样例标记。
算法描述如下:
为了防止过拟合,一般用使用交叉验证的方式,用训练初级学习器未使用的样本来产生次级学习器的训练样本。
5.多样性
在第一小节已经提到,为了获得泛化能力强的集成,我们需要的个体学习器应该是“好而不同”的。为了获得更好的多样性,可以从四个方面入手:数据样本、输入属性、输出表示和算法参数。
· 数据样本扰动
给定初始数据集,可从中产生不同的数据子集,再利用这些子集训练处不同的个体学习器。数据样本扰动通常基于采样法,例如在Bagging中使用自助采样,在AdaBoost中使用序列采样。
· 输入属性扰动
训练样本由一组属性描述,不同的属性子集提供了观察数据的不同视角。从不同属性子集训练处的个体学习器必然有所不同。其中随机森林就运用了输入属性扰动。
· 输出表示扰动
此做法的基本思路是对输出表示进行操纵以增强多样性。可对训练样本的类标记稍作变动,如翻转法,随机改变一些训练样本的标记;也可对输出表示进行转化,如输出调制法将分类输出转化为回归输出后构建个体学习器;还可将原任务拆解为多个可同时求解的子任务,如ECOC法利用纠错输出码将多分类任务拆解为一系列二分类任务来训练个体学习器。
· 算法参数扰动
基学习算法一般都有参数需进行设置,例如神经网络的隐层神经元数、初始连接权值等,通过随机设置不同的参数,往往可产生差别较大的个体学习器。
不同的多样性增强机制可同时使用,如随机森林同时使用了数据样本扰动和输入属性扰动。