七、集成学习


集成学习(ensemble learning)通过将多个学习器进行结合,常可获得比单一学习器显著优越的泛化性能。

集成方法相比于单一模型需要更多的计算,因此有时候也认为是用更多的计算来弥补弱模型。同时,这也导致模型中的每个参数所包含的信息量比单一模型少很多,导致太多的冗余。理论上来说,集成模型也比单一模型更容易过拟合。

要获得好的集成,个体学习器应“好而不同”,即个体学习器要有一定的准确性,即学习器不能太坏,并且要有多样性,即学习器间具有差异。

接下来介绍两种集成方式,同时生成的并行化方法,以及串行的序列化方法。

1.Bagging和随机森林

Bagging是一种并行式的集成学习方法,即基学习器的训练之间没有前后顺序可以同时进行,使用“有放回”采样的方式选取训练集,对于包含n个样本的训练集,进行n次有放回的随机采样操作,从而得到m个样本的采样集,这样训练集中有接近36.8%的样本没有被采到。按照相同的方式重复进行,我们就可以采集到T个包含n个样本的数据集,从而训练出T个基学习器,最终对这T个基学习器的输出进行结合。

随机森林(Random Forest)是Bagging的一个拓展体,它在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。具体来说,传统决策树在选择划分属性时是当前结点的属性集合d中选择一个最优属性;而在RF中,对基决策树的每个结点,先从该结点的属性集合中随机选择一个包含k个属性的子集,然后再从这个子集中选择一个最优属性用于划分。这里的参数k控制了随机性的引入程度:若令k=d,则基决策树的构建与传统决策树相同;若k=1,则是随机选择一个属性用于划分;一般情况下,推荐值k=log2d。

随机森林简单、容易实现、计算开销小,令人惊奇的是, 它在很多现实任务中展现出强大的性能,被誉为"代表集成学习 技术水平的方法"可以看出,随机森林对 Bagging 只做了小改动,但是与 Bagging中基学习器的"多样性"仅通过样本扰动(通过对初始训练集采样)而来不同,随机森林中基学习器的多样性不仅来自样本扰动,还来自属性扰动,这就使得最终集成的泛化性能可通过个体学习器之间差异度的增加而进一步提升。

2. Boosting

Boosting的基本思想是先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练,样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注,尽可能纠正这些错误,一直向下串行直至产生需要的T个基学习器,Boosting最终对这T个学习器进行加权结合。

Adaboost算法


对每一个学习器$h_{t}$,

根据训练集$D_{t}$,最小化目标函数,训练学习器$h_{t}$,

计算错误率$\varepsilon =\frac{{未正确分类的样本数目}}{{所有样本数目}}$

计算权重$\alpha_t = \frac{1}{2}\ln \left( {\frac{{1 - \varepsilon }}{\varepsilon }} \right)$

调整$D_{t}$中的每一个样本$D_i^{t}$的权重为$D_i^{t+1}$,给下一个学习器$h_{t+1}$使用:

样本被正确分类的权重为,$D_i^{t + 1} = \frac{{D_i^t{e^{ - \alpha_t }}}}{{Sum(D)}}$

样本被错误分类的权重为,$D_i^{t + 1} = \frac{{D_i^t{e^{ \alpha_t }}}}{{Sum(D)}}$

最终学习器集成为T个学习器的加权求和$H(x) = \sum\limits_{t = 1}^T {{\alpha _t}{h_t}(x)} $


注:针对每一个基学习器$h_{t}$,目标函数是能够纠正$h_{t-1}$的全部错误。

提升树

XgBoost

GBDT

LightBoost

贝叶斯框架下的集成

Bayes Optimal Classifier(贝叶斯最优分类器)

贝叶斯最优分类器(Bayes Optimal Classifier)是对所有的模型进行集成,所以通常来说,没有别的集成模型会比它有更好的表现。每一个子模型对训练数据的似然性都有一个投票比例。为了促使训练数据集大小是有限的,我们需要对每个子模型的投票乘上一个先验概率。

$y = \arg {\max _{{c_j} \in C}}\sum\nolimits_{{h_i} \in H} {P\left( {{c_j}|{h_i}} \right)P\left( {D|{h_i}} \right)P\left( {{h_i}} \right)} $

其中,y是预测的类,C是所有可能的类别,argmax即找到最大的类别$c_j$,H是所有的模型,$\sum\nolimits_{{h_i} \in H}$是对所有的子模型$h_i$结果求和集成,P是概率分布,D是训练数据集。

Bayes Optimal Classifier并不能很好的实现。实际中不能很好的实现Bayes Optimal Classifier的理由主要有以下几个:

  • 1) 绝大多数模型空间都非常大而无法遍历(无法 argmax了);
  • 2) 很多模型给出的结果就是一个类别,而不是概率(模型需要$P\left( {{c_j}|{h_i}} \right))$);
  • 3) 计算一个训练数据的无偏估计$P\left( {D|{h_i}} \right)$是非常难的;
  • 4) 估计各个”假设”的先验分布$P\left( {{h_i}} \right)$基本是不可行的;

Bayesian model averaging (BMA, 贝叶斯模型平均)

Bayesian model averaging (BMA, 贝叶斯模型平均)是一个寻求近似于Bayes Optimal Classifier 的方法,它通过从模型空间里抽样一些模型,再使用贝叶斯法则合并起来。 与Bayes Optimal Classifier不同,BMA是可以实际实现的。可以使用蒙特卡洛来采样”假设”。比如, 使用Gibbs sampling来得到一堆模型$P\left( {D|{h_i}} \right)$。但事实表明这种方法比简单的集成方法(如bagging)更容易过拟合、且表现更差。

Bayesian model combination(BMC, 贝叶斯模型组合)

Bayesian model combination(BMC) 是 BMA 的一个校正算法。它不是独立的生成集成中的一个个模型,而是从可能的集成空间中生成。这个修正克服了BMA算法给单个模型所有权重的倾向。尽管BMC比BMA有更多的计算量,但是它的结果也非常的好!有很多例子证明了BMC比BMA和bagging的效果更好。

对于BMA而言,使用贝叶斯法来计算模型权重就必须要计算给定各个模型时生成数据的概率$P\left( {D|{h_i}} \right)$。通常情况下,Ensemble中的模型都不是严格服从训练数据的生成分布来生成数据,所以这一项一般都非常接近于0。如果Ensemble足够大到可以抽样整个”假设”空间,那么理论上结果是比较好。但是,Ensemble空间有限,不可行。因此,训练数据中的每个模式会导致Ensemble中与训练数据分布最接近的模型的权重增大。

举例子,比如模型空间里有五个模型,

BMA是选择一个与生成数据的分布最接近的模型,而BMC是选择一个与生成数据的分布最接近的模型组合方式。BMA可以看成是从一堆模型中使用交叉验证来选择一个最优模型。而BMC可以认为是从一堆随机模型组合中选择一个最好的组合(Ensemble)

Stacking

参考:

http://www.datakit.cn/blog/2014/11/02/Ensemble_learning.html

机器学习 周志华

优质内容筛选与推荐>>
1、转载:世界景点
2、Servlet里的过滤器和监听器
3、回答自己的提问
4、Spring.NET学习笔记9——打造简易的依赖注入框架(练习篇) (转)
5、发布一个.Net轻型的ORM框架(包含自动生成工具),欢迎使用


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号