网络机器人吧社区

《机器学习》笔记-集成学习(8)

机器学习算法全栈工程师 2019-01-10 11:35:58

   作者:刘才权           

编辑:祝鑫泉           


前  言


如今机器学习和深度学习如此火热,相信很多像我一样的普通程序猿或者还在大学校园中的同学,一定也想参与其中。不管是出于好奇,还是自身充电,跟上潮流,我觉得都值得试一试。对于自己,经历了一段时间的系统学习(参考《机器学习/深度学习入门资料汇总》),现在计划重新阅读《机器学习》[周志华]和《深度学习》[Goodfellow et al]这两本书,并在阅读的过程中进行记录和总结。这两本是机器学习和深度学习的入门经典。笔记中除了会对书中核心及重点内容进行记录,同时,也会增加自己的理解,包括过程中的疑问,并尽量的和实际的工程应用和现实场景进行结合,使得知识不只是停留在理论层面,而是能够更好的指导实践。记录笔记,一方面,是对自己先前学习过程的总结和补充。 另一方面,相信这个系列学习过程的记录,也能为像我一样入门机器学习和深度学习同学作为学习参考。

章节目录

  • 个体与集成

  • Boosting

  • Bagging与随机森林

  • 集合策略

  • 多样性


1

个体与集成


集成学习(ensemble learning)的一般结构:先产生一组“个体学习器”(individual learner),再用某种策略将他们结合起来,如下图所示, 

个体学习器通常由一个现有的学习算法从训练数据产生: 
* 只包含同种类型的个体学习器,这样的集成是“同质”的(homogeneous)。同质集成中的个体学习器亦称为”基学习器“(base learning),相应的学习算法称为”基学习算法“(base learning algorithm)。 
* 集成也可包含不同类型的个体学习器,这样集成是”异质“的(heterogeneous)。相应的个体学习器,常称为”组件学习器“(component learning)或直接称为个体学习器。 
在一般的经验中,如果把好坏不等的东西掺到一起,那么通常结果会是比坏的好一些,比好的要坏一些。集成学习把多个学习器结合起来,如何能获得比最好的单一学习器更好的性能呢? 
考虑一个简单的例子:在二分类任务中,假定三个分类器在三个测试样本的表现如下图所示, 

其中,√表示分类正确,x表示分类错误,集成学习的结果通过投票法(voting)产生,即“少数服从多数”。这个简单的例子显示出:要获得好的集成,个体学习器应“好而不同”。个体学习器要有一定的“准确性”,即学习器不能太坏,而且要有“多样性”(diversity),即学习器之间有差异。事实上,如何产生并结合“好而不同”的个体学习器,恰是集成学习研究的核心。 
根据个体学习器的生成方式,目前集成学习的方法大致可分为两大类:

  • 个体学习器间存在强依赖关系、必须串行生成的序列化方法,代表是Boosting;

  • 个体学习器间不存在强依赖关系、可同时生成的并行化方法,代表是Baggig和“随机森林”(Random Forest);


2

Boosting


Boosting是一族可将弱学习器提升为强学习器的算法。这族算法的工作机制类似:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续收到更多的关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复进行,直到基学习器数目达到事先指定的值T,最终将这T个学习器进行加权结合。 
Boosting族算法最著名的代表是AdaBoost。AdaBoost有多种推导方式,比较容易理解的是基于“加性模型”(additive model)即基学习器线性组合, 
 
来最小化指数损失函数(exponential loss function), 


3

Bagging与随机森林



欲得到泛化性能强的集成,集成中的个体学习器应尽可能独立。虽然“独立”在显示任务中无法做到,但可以设法使基学习器尽可能具有较大差异。给定一个训练数据集,一种可能的做法是对训练样本进行采样,产生若干个不同的子集,再从每个数据子集中训练出一个基学习器。这样,由于训练数据不同,我们获得的基学习器可望具有比较大的差异。然而,为获得更好的集成,我们还同时希望个体学习器不能太差。如果采样出的每个子集都完全不同,则每个基学习器只用到了一小部分训练数据,甚至不足进行有效学习,这显然无法确保产生出比较好的基学习器。为考虑这个问题,我们可考虑使用相互有交叠的采样子集。

1. Bagging

Bagging是并行式集成学习方法最著名的代表,从名字即可看出,它直接基于前面介绍过的自助采样法(bootstrap sampling)。从偏差-方差分解角度看,Bagging主要关注降低方差。

2. 随机森林

随机森林(Random Forest,简称RF)是Bagging的一个扩展变体。RF在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。 
随机森林对Bagging只做了小改动,但是与Bagging中基学习器的“多样性”仅通过样本扰动(通过对初始训练集采样)而来不同,随机森林中基学习器多样性不仅来自样本扰动,还来自属性扰动,这就使得最终集成的泛化性能可通过个体学习器之间的差异度的增加而进一步提升。

4

组合策略


学期器结合可能从三个方面带来好处:

  • 从统计的方面看,由于学习任务的假设空间往往很大,可能有多个假设在训练集上达到同等性能,此时若使用单学习器可能因误选而导致泛化性能不佳,结合多个学习器减小这一风险;

  • 从计算的方面来看,学习算法往往会陷入局部极小,有的局部极小点所对应的泛化性能可能很糟,而通过多次运行之后进行结合,可降低陷入糟糕局部极小点的风险;

  • 从表示的方面来看,某些但学习器则肯定无效,而通过结合多个学习器,由于响应的假设空间有所扩大,有可能学得更好的近似。 
    直观的示意图如下所示, 

    集成学习常见策略有:

  • 平均法

  • 投票法

  • 学习法


小结


误差-分歧分解

欲构建泛化能力强的集成,个体学习器应“好而不同”,其中,“误差-分歧分解”(error-ambiguity decomposition)是一个简单的理论分析方法。但该推到过程只适用于回归学习,难以直接推广到分类学习任务中。

多样性度量

多样性度量(diversity measure)是用于度量集成中个体分类器的多样性,即估算个体学习器的多样化程度。常用的多样性度量包括: 
* 不合度量(disagreement measure) 
* 相关系数(correlation coefficient) 
* Q-统计量(Q-statistics) 
* k-统计量(k-statistics)

多样性增强

在集成学习中需有效地生成多样性大的个体学习器。与简单地直接用初始数据训练出个体学习器相比,一般思路是在学习过程中引入随机性,常见的做法主要有, 
* 数据样本扰动 
* 输入属性扰动 
* 输出表示扰动 
* 算法参数扰动


end






机器学习算法全栈工程师


                            一个用心的公众号

长按,识别,加关注

进群,学习,得帮助

你的关注,我们的热度,

我们一定给你学习最大的帮助




Copyright © 网络机器人吧社区@2017