因为是以李航的《统计学习方法》为主来看,将西瓜书作为补充。李航书的特点就是10个算法,每个推导,实例辅助,不拖泥带水,干货满满。西瓜书恰好弥补了李航书的不足,非常丰润,很多补充的小知识点。这篇是在整理李航书的boosting时补充其内容的。
集成学习(ensemble learning)通过构建多个个体学习器并结合起来完成学习任务。
要获得好的集成,个体学习器应该“好而不同”,要有一定的“准确性”,即学习器不能太坏,并且要有多样性,之间具有差异。互为补充,才可提升效果。
集成学习研究核心:如何产生并结合个体学习器。
根据个体学习器的生成方式,集成学习大致分为两类:
详见:
(1)《统计学习方法》笔记08:boosting(1)
(2)《统计学习方法》笔记08:boosting(2)
西瓜书P175-176从基于加法模型迭代式优化指数损失函数的角度,推导了AdaBoost算法。
Boosting算法可通过“重赋权法”实施,每轮调整数据权值。对于无法接受带权样本的基学习算法,可通过“重采样法”处理,即每轮学习中,根据样本分布对训练集重新进行采样,利用重采样而得的样本集对基学习器训练。
Boosting算法每轮都会都会检查当前生成的学习器是否比随机猜测(0.5)好。一旦不比其好,则当前基学习器被抛弃,学习停止。此时或许轮数还没达到,导致最终性能不好。若用的重采样法,则可重启动,避免训练过早结束,即在抛弃当前不满足条件的基学习器后,根据当前分布重新对样本采样,基于新样本重新训练,使得预设轮数完成。
从偏差/方差分解的角度,Boosting主要关注减低偏差。因此它可以基于泛化性能相当弱的学习器构建很强的集成。集成规模:集成中包含的个体学习器数目。规模越大,分类边界越复杂,表示能力越强。
现实任务中,个体学习器无法做到完全独立,但可设法使得其具有较大差异。
比如对训练集采样,生成若干个子集,每个子集训练一个基学习器。同时为了提高每个的性能,使用相互有交叉的采样子集。
Bagging(Bootstrap AGGregatING,1996)是并行式集成学习最著名的代表。
给定m个样本的数据集,我们先随机选出一个样本放入采样集中,再把该样本放回初始数据集,使得下次采样时该样本仍有可能被选中,这样经过m次随机采样操作,得到一个含m个样本的采样集。
如上可采样出T个含m个训练样本的采样集。基于每个采样集训练出一个基学习器,再将基学习器组合。这就是Bagging的基本流程。
预测时,分类任务使用简单投票法,回归任务使用简单平均法。
训练一个Bagging集成与直接使用基学习器训练一个学习器的复杂度同阶。这是一个很高效的可并行的集成学习算法。
由于每个基学习器仅使用初始集中约63.2%的数据,剩余数据可作为验证集来对泛化性能进行包外估计(out-of-bag estimate)。例如当基学习器是决策树时,可使用包外样本辅助剪枝。
从偏差-方差角度看,Bagging主要关注降低方差,因此它在不剪枝决策树、神经网络等易受样本扰动的学习器上效用更加明显。
RF(Random Forest,2001)是Bagging的一个扩展变体。
RF在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树训练过程中引入随机属性选择。
传统决策树在选择划分属性时,在当前节点的d个属性集合中选择一个最优属性;而在RF中,对基决策树的每个结点,先从该结点的属性集合中随机选择一个包含k个属性的子集。然后再从该子集中选择最优属性用于划分。k控制了随机性的引入程度。若k=d,则RF退化为传统决策树。通常使用 k=log2d 为推荐值。
RF简单,易实现,计算开销小。与Bagging相比,RF中基学习器的多样性不仅来自样本扰动还来自属性扰动。而且训练效率常优于Bagging,因其只需考察一个属性子集。其收敛性与Bagging相似,起始性能往往相对较差,因为属性扰动的缘故,个体学习器性能往往有所降低,随着学习器增多,RF通常会收敛到更低的泛化误差。
(1)平均法,数值型输出
-简单平均法:直接计算均值
-加权平均法:各项系数和为1,各项>=0
注:Breiman研究发现,必须使用非负权重才能确保集成学习性能优于单一最佳个体,因此集成中一般对个体权重做非负约束。
通常,在个体学习器性能相差较大时宜采用加权平均法,性能相近时宜采用简单平均法。
(2)投票法,分类任务
-绝对多数投票法:某标记得票过半数即预测为该类
-相对多数投票法:得票最多的标记即预测为该类
-加权投票法
类概率,相当于后验概率的一个估计,使用类概率的投票称为软投票。
类标记,硬投票。
(3)学习法
当训练数据很多时,一种更为强大的结合策略是使用学习法,通过另一个学习器来进行结合。
Stacking是学习法的典型代表。此处将个体学习器称为初级学习器,用于结合的学习器称为次级学习器或者元学习器。Stacking本身也是一种集成学习方法,也可看作是一种特殊的结合策略。
Stacking先从初始训练集训练出初级学习器,然后“生成”一个新数据集用于训练次级学习器。新数据集中,初级器的输出被当做样例输入特征,初始样本的标记被当做样例标记。
训练阶段,次级训练集是利用初级学习器产生的,若直接用初级学习器的训练集来产生次级训练集,则过拟合风险比较大;因此,一般通过交叉验证或留一法方式,用训练初级学习器未使用的样本生成次级学习器的训练样本。
以K折交叉验证为例,初始训练集D被随机划分为k分大小相似的集合 D1,...,DK 。另 Dj 表示第j折的测试集, Dj¯ 表示第j折的训练集。给定T个初级学习算法,初级学习器 h(j)t 通过在 Dj¯ 上使用第t个学习算法产生,则共生成T个初级学习器。
对 Dj 中每个样本 xi ,分别用这T个初级学习器过一遍,得到 T∗|Dj| 个训练集,标注为原标注。然后用这个新训练集训练次级学习器。K折交叉验证,选择最优初学习器和次学习器。
对待测试样本,分别过初、次学习器,即可得到结果。
次级学习器的输入属性表示、学习算法,对Stacking集成的泛化性能有很大影响。有研究表明,将初级学习器的输出类概率作为次级学习器的输入属性,用多响应线性回归(Multi-response Linear Regression,MLR)做次级学习算法效果较好。在MLR中使用不同属性集效果更佳。
(1)误差-分歧分解
第一小节提到:构建泛化能力强的集成,个体学习器应好而不同。可以从理论上分析这句话有道理。
1995年Krogh and Vedelsby首先推导得出:
集成的泛化误差 = 个体学习器泛化误差的加权均值 - 个体学习器的加权分歧值
这说明:个体学习器准确性越高(右式第一项越小),多样性越大(右式第2项越大),则集成效果越好。
但上式不能作为优化目标来求解,不能直接优化,且加权分歧值仅在集成构造好后才可估计。
(2)多样性度量
估计个体学习器的多样化程度,可以考虑两两相似/不相似性。
根据两个分类器,二者同时预测为正类、反类、一正一反、一反一正的四种情况下的样本点个数,可以得到一些常见的多样性度量办法。
(3)多样性增强
讨论如何增强个体学习器的多样性。方法从以下角度来考虑:
3-1. 数据样本扰动
从初始数据集中生成不同的子集,利用不同子集训练不同个体器。
通常基于采样法。例如Bagging自助采样,AdaBoost序列采样。
对决策树,神经网络等,训练样本稍加变化就会导致学习器显著变动,数据样本扰动法对这样的“不稳定基学习器”很有效。
对线性学习器,SVM,朴素贝叶斯,k-NN等“稳定基学习器”则需要其他扰动机制。
3-2. 输入属性扰动
训练样本由一组属性描述,不同属性子集代表不同的子空间。如随机子空间(random subspace)算法就依赖于输入属性扰动。RF在Bagging基础上加入了属性扰动。
包含了大量冗余属性的数据,子空间训练不仅可以产生多样性大的个体,同时节省时间;若数据属性较少,则不宜使用该法,因为可能由于属性少而使得个体学习器性能较差。
注:子空间一般从原始高维空间投影产生的低维属性空间,未必是初始属性。
3-3. 输出表示扰动
对输出表示进行操作,以增强多样性。
如翻转法,随机改变一些训练样本的标记。
3-4. 算法参数扰动
基学习器算法一般需要设置参数。随机设置不同参数,往往可产生较大个体学习器。
不同的多样性增强机制可同时使用。如RF同时用样本数据扰动和输入属性扰动。
参考资料
[1] 周志华《机器学习》