机器学习(5)——集成学习(Ensemble Learning)

一:Ensemble Learning

1.1 简介

集成学习的主要思路是:根据指定的训练集,训练过个分类器,然后把这些分类器的分类结果进行某种结合(比如投票、加权求和)决定分类结果,以取得更好的结果。引用一句俗语表示就是——三个臭皮匠顶个诸葛亮,即通过多个决策者来提高分类器的泛化能力

1.2 分类器

在前一节中,我们提到了分类器,实际上我们也可以把单个的分类器称为一个个体学习器。而这个个体学习器就对应机器学习中的一些学习算法——决策树、神经网络、支持向量机等等。同时在一个集成学习中,我们可以全部使用相同的学习算法,也可以使用不同的学习算法。(个人估计,这也是该算法名称的由来)。在本章的后续过程中,将重点说明两个集成学习的算法:Bagging、Boosting。

1.3 主要问题

如果我们仔细思考1.1中对于集成学习算法主要思想的描述,你会发现“我们主要解决的问题”有如下两点:
1. 构建差异性基分类器。这个主要是利用用户提供的数据生成我们需要的分类器。
2. 如何合并分类器?针对我们已经生成好的分类器,我们该如何结合这些分类器?

二:Bagging

2.1 场景

我们现在提供了一个数据集 D{<xi,yI>} ,数据的分布图如下(绿色的数据是我们的测试数据,其它的是训练数据):
这里写图片描述

现在我们的随机从训练集中抽取子集,每个子集包含5个点,每抽完一个子集将抽取的点放回重新抽取,总共挑选5个子集。

然后学习一个三项多项式(这里也就是收我们的分类器是一个学习一个三次多项式),下图是就是我们学习的5个三次多项式的结果:
这里写图片描述

从图中我们可以看出,大部分学习的三项多项式都是差不多的,有一个偏离比较大,也是由于选取的子集中没有靠后的数据造成的。所有的都是随机的。

接下来我们展示一下,通过选在子集的平均值训练出来的三项多项式的结果如何呢?如下图:
这里写图片描述
如图中实现所示,既是我们的结果。图中的蓝线是通过简单回归得到的四项多项式;红线是我们通过求我们前边得到的5个三项多项式得到的结果

这里呢?我要直接给出一个结论(如果想具体分析的话,可能需要自己私下去模拟一下了):蓝现在训练集中的表现要比红线好,但是红现在测试集或验证集上的表现总是好。这也间接说明该学习算法相对一般的算法会提高相应的泛化能力。为什么会出现这种现象呢?

因为我们随机选择子集,从而不会因为噪音或者选择错一两个点而纠结,通过求均值我们可以降低所有的方差和差异。

2.2 Bagging

上一节我们描述了一个Bagging算法的实际运用场景,并给了一些图形便于大家的理解。再回想下第一节中讲解到的内容,我们可以总结出Bagging算法解决主要问题的方式如下:

  1. 我们定义的训练规则是:均匀随机的选取训练集中的子集,然后运用于学习分类器。
  2. 如何结合分类器?通过求平均值的方式,我们得到最终的学习模型。

Bagging是我们能够想到的最简单的集成学习算法,并且这种算法效果相当不错,不过其中有错误的地方,也有能够做的更好的地方,该算法能够解决部分问题,但是解决不了所有问题,而接下俩我们将讲解到就是一个可以解决所有问题的算法。

为了便于大家理解,这里在额外的展示一幅图片,和第三节最后展示的图形相对应,便于大家区分这两种算法。

这里写图片描述

三:Boosting

在开始本章之前,我先给大家列举一个现象,而这个现象也正是Boosting算法的一个核心理念:笔者在现实的学习中。在观看一篇文章之后,会对那些不了解的知识特别关注,并重点进行学习,因为这样才能够提高自己。

3.1 表现不太好的样本

在开始之前需要大家了解误差:针对回归问题的话,误差训练集的标签数据与实际学习结果的平方方差就是我们需要的误差;对于分类问题,它的结果非0即1,误差计算的是匹配错误的误差数量,我们也可以求相应的误差率(错误匹配的个数与总样本数的比值,但是这样是默认将所有的样本同样重要,但是在实际的过程中却并非如此)。

在前一节中我们是随机选取子集,而Boosting中则是根据是否“难”选择子集,如何理解这个呢?请看下面的一个例子。

PD[h(x)c(x)]

h(x) 代表我们的假设,结果是推断出来的标签值; c(x) 代表我们训练集中的真标签。而上式表示误差频率。

desirable properties for base learners when used in practice.

四:其它

4.1 集成学习提高分类器泛化能力的条件

4.2 过拟合

对于大部分分类器来说:当个体分类器过拟合时,会导致集成学习最终的模型过拟合。但是有个别的分类器不会出现这种情况,如随机森林
参考文档:
1:Ensemble Learning概述