集成学习算法

内容来自国内机器学习大牛周志华《机器学习》一书。


集成算法介绍

集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务。

典型的集成学习结构如下:

集成学习算法_第1张图片

通过训练数据产生一组个体学习器,然后使用某种结合策略将个体学习器组结合起来。

其中,个体学习器通常由一个现有的学习算法从训练数据中产生,如决策树算法、神经网络算法等。根据个体学习器类型的相同与否将集成分为同质集成和异质集成。

同质集成即待集成的个体学习器组均为同类型的模型,如决策树的集成, 神经网络的集成等。

异质集成即待集成的个体学习器组为不同类型的模型,如决策树和神经网络的混合集成。


 集成学习通过将多个学习器进行结合,常可获得比单一学习器显著优越的泛化性能。这对弱学习器尤为明显,因此集成学习的很多理论研究都是针对弱学习器进行的,而基学习器有时也直接被称为弱学习器。但需注意的是,虽然从理论上来说使用弱学习器集成足以获得好的性能,但在实践中出于种种考虑,例如希望使用较少个体的学习器或者重用关于常见学习器的一些经验等,往往会使用比较强的学习器。

看到这里,我们不妨思考第一个问题,集成学习模型一定比个体学习器组中最优秀的学习器性能好吗?


集成提升性能情况
  测试样例1 测试样例2 测试样例3
个体分类器1
个体分类器2
个体分类器3
集成模型

从表中不难发现,一个由三个个体分类器组成的简单集成模型,对于三个测试样例,三个个体分类器中均会有一个分类器分类错误,但是集成模型却达到了100%的正确率,提升十分明显。

集成模型真的有这么立竿见影的效果吗?

答案很简单,不能,集成模型不是银弹,而且集成模型对集成的个体学习器组有一定的规格要求。

集成不能提升性能
  测试样例1 测试样例2 测试样例3
个体分类器1
个体分类器2
个体分类器3
集成模型
天雷滚滚,刚刚还不可一世的集成模型在这个例子中竟然没有一点点提升, 那么为什么?

表中三个个体分类器对三个测试样例的分类相同: 对 对 错

举个例子说明一下,现在有三个同学小明、小强和小红共同合作一起做语文、英语和数学三个科目的试卷

上表中集成模型的性能之所以没有任何提升是因为他们三个人都是擅长语文和英语而数学成绩比较差,这样他们在一起做试卷数学成绩还是没能有提高,木桶原理。而第一个表中集成模型的性能提高是因为他们三个擅长的科目不相同,这样就能取长补短,解决短板问题。

集成模型降低性能
  测试样例1 测试样例2 测试样例3
个体分类器1
个体分类器2
个体分类器3
集成模型

这个表中表达了小明、小强和小红是三个学渣,每个人做题的正确率只有33.3%,这个时候当他们决定把每个人的方法集成起来的时候悲剧就发生了,正确率为0。

通过上面三个例子不难总结,想要获得好的集成效果,个体学习器应该“好而不同”,即一是个体学习器要有一定的准确性(比如前两个例子中每个人有66.6%的正确率),二是个体学习器应该有多样性(三个人擅长的科目不一样时,投票表决获得了比较好的结果)

根据个体学习器的生成方式,目前的集成学习方法大致可分为两大类

  • 即个体学习器间存在着强依赖关系、必须串行生成的序列化方法,代表是Boosting方法
  • 个体学习器不存在强依赖关系、可同时生成的并行化方法,代表是Bagging和“随机森林”(Random Forest)


使用集成学习原因

1. 模型选择 

假设各弱分类器间具有一定差异性(如不同的算法,或相同算法不同参数配置),这会导致生成的分类决策边界不同,也就是说它们在决策时会犯不同的错误。将它们结合后能得到更合理的边界,减少整体错误,实现更好的分类效果。

集成学习算法_第2张图片


2. 数据集过大或过小 

数据集较大时,可以分为不同的子集,分别进行训练,然后再合成分类器。 

数据集过小时,可使用自举技术(bootstrapping),从原样本集有放回的抽取m个子集,训练m个分类器,进行集成。 


3. 分治 

若决策边界过于复杂,则线性模型不能很好地描述真实情况。因此先训练多个线性分类器,再将它们集成。 


4. 数据融合(Data Fusion) 

当有多个不同数据源,且每个数据源的特征集抽取方法都不同时(异构的特征集),需要分别训练分类器然后再集成




--------------------------未完待续--------------------------

Boosting方法介绍

Bagging方法介绍

你可能感兴趣的:(机器学习,机器学习之路)