定义

集成学习是一种机器学习范式,其中多个学习器被训练来解决相同的问题。 这与试图从训练数据中学习一个假设的普通机器学习方法相反,集成方法尝试构造一组假设并将它们结合使用。

一个集合包含一些通常被称为基础学习器的学习器。 一个集合的泛化能力通常比单个基础学习器的泛化能力强得多。 实际上,集成学习具有极大吸引力,因为它可以将弱于随机猜测的弱学习器提升为能够做出非常准确预测的强大学习器。 所以,“基础学习器”也被称为“弱学习器”。 然而,值得注意的是,尽管大多数理论分析都是针对弱学习器的,但实践中使用的基础学习器并不一定很弱,因为使用不那么薄弱的基础学习器通常会导致更好的表现。

基础学习器通常通过基础学习算法从训练数据生成,所述基础学习算法可以是决策树,神经网络或其他种类的机器学习算法。 大多数集成方法使用单一的基本学习算法来生成均匀基础学习器,但也有一些方法使用多种学习算法来生成异构学习器。 在后一种情况下,没有单一的基本学习算法,因此,有些人更喜欢称学习器为个别学习器或组件学习者为“基础学习器”,而“个别学习器”和“组件学习器”的名称也可用于同质基础学习器。

构成集合

通常情况下,集合是分两步构建的。 首先,生成许多基础学习器,这些基础学习器可以以并行样式或序列样式生成,序列样式即基础学习器的生成影响后续学习器的生成。 然后,将基础学习器结合使用,其中最流行的组合方案是用于分类的多数投票和用于回归的加权平均。

一般来说,为了获得一个好的集合,基础学习器应该尽可能地更加准确,并尽可能多样化。这已经被Krogh和Vedelsby正式表现出来,并且被许多其他人所强调。对于估计学习器的准确性有很多有效的过程,例如交叉验证,保持测试等。然而,对于直觉上认为是多样性的东西没有严格的定义。虽然已经设计了多种多样性措施,但Kuncheva和Whitaker 表示,现有的多样性措施在建设集合方面的作用是值得怀疑的。在实践中,可以从不同的渠道引入基础学习器的多样性,例如对训练样例进行二次采样,操纵属性,操纵输出,将随机性注入学习算法,甚至同时使用多种机制。采用不同的基础学习器生成过程和/或不同的组合方案导致不同的集合方法。

有许多有效的集成方法。 下面将简要介绍三种有代表性的方法,Boosting ,Bagging 和Stacking 。 这里为了简单考虑二元分类。 也就是说,设X和Y分别表示实例空间和一组类标签,假设Y = {-1;+1}中。 训练数据集D = {(x1 ; y1); (x2; y2); …; (xm; ym)}给出,其中xi∈X和yi∈Y(i = 1;….; m)。

Boosting

实际上,Boosting是一系列算法,因为它有许多变体。在这里,最着名的算法AdaBoost 被认为是一个例子。首先,它为所有训练实例分配相同的权重。将第t轮学习中权重的分布表示为Dt。从训练数据集和Dt算法生成一个基本学习器ht:X-> Y通过调用基础学习算法。然后,它使用训练样例来测试ht,并且不正确分类的例子的权重将会增加。因此,获得更新的权重分布Dt + 1。从训练数据集和Dt + 1中,AdaBoost通过再次调用基础学习算法生成另一个基础学习器。这种过程重复进行T次,每次都称为一轮,最终的学习器是通过T轮基础学习者的加权多数投票得出的,其中在训练过程中确定了学习器的权重。在实践中,基础学习算法可以是可以直接使用加权训练样例的学习算法;否则可以通过根据权重分布Dt对训练样本进行采样来利用权重。 AdaBoost的伪代码如图1所示。

Bagging

Bagging 通过调用基础学习算法来训练大量基础学习器,每个基础学习器都来自不同的bootstrap样本。 Bootstrap样本是通过对替换的训练数据集进行二次采样得到的,其中样本的大小与训练数据集的大小相同。 因此,对于bootstrap样本,可能会出现一些训练样例,但有些训练样例可能不会,例如至少出现一次样例的概率约为0.632。 在获得基础学习器后,Bagging通过多数投票将他们结合起来,并预测得票最多的类。 Bagging的伪代码如图2所示。 值得一提的是Bagging随机森林的一个变种被认为是迄今为止最强大的集合方法之一。

Stacking

在Stacking的典型实现中,通过采用不同的学习算法从训练数据集中生成许多第一级个体学习器。 这些个别学习器然后被称为元学习器的二级学习者组合。 Stacking的伪代码如图3所示。 很明显Stacking与信息融合方法有着密切的关系。

一般来说,没有一种整体方法比其他整体方法更出色。 流行的集合方法的实证研究可以在许多论文中找到。 以前,有人认为使用更多的基础学习器会导致更好的表现,但周等人证明了“许多可能比所有更好“的理论,这就表明更多的基础学习器带来更好的表现可能不是事实。 结果表明,在生成一组基础学习器之后,选择一些基础学习器而不是全部使用它们来组成一个集合是更好的选择。 这样的集合被称为选择性集合。

值得一提的是,除了分类和回归之外,集合方法也被设计用于聚类和其他类型的机器学习任务。

为什么集合优于单个

为了理解为什么一个集合的泛化能力通常比单个学习器的泛化能力强得多,Dietterich 通过观察机器学习的本质为寻找最准确假设的假设空间提供了三个理由。第一个原因是,训练数据可能无法提供足够的信息来选择单一的最佳学习器。例如,可能有许多学习器在训练数据集上的表现同样出色。因此,结合这些学习器可能是更好的选择。第二个原因是,学习算法的搜索过程可能不完善。例如,即使存在唯一的最佳假设,也可能难以实现,因为运行算法会导致次优假设。因此,集合可以弥补这种不完善的搜索过程。第三个原因是,被搜索的假设空间可能不包含真正的目标函数,而集合可以给出一些很好的近似值。例如,众所周知,决策树的分类边界是与坐标轴平行的线段。如果目标分类边界是一条光滑的对角线,则使用单个决策树不能产生良好的结果,但通过组合一组决策树可以实现良好的近似。请注意,这些是直观的,而不是严格的理论解释。

有关Boosting和Bagging等着名集合方法的理论研究很多,但对这些方法的潜在机制还没有一个清晰的认识。 例如,经验观察表明,即使经过大量循环,Boosting也不会遭受过度拟合,有时甚至能够在训练误差已经达到零之后减少泛化误差。 尽管许多研究人员已经研究了这种现象,但理论解释仍在争论中。

偏差方差分解常用于研究集合方法的性能。 众所周知Bagging可以显着减少方差,因此最好应用于遭受大方差的学习器,例如决策树或神经网络等不稳定的学习器。 除了减少方差外,Boosting可以显着减少偏差,因此,对于弱决策者如决策残块,Boosting通常更有效。

总结

集成学习是一种强大的机器学习范式,在许多应用中展现出明显的优势。 通过使用多个学习者,一个集合的泛化能力可以比单个学习者的泛化能力好得多。 目前的集合方法的严重缺陷是缺乏可理解性,即集合体所学的知识对于用户是不可理解的。 提高集合的可理解性是一个重要但尚未充分研究的方向。 另一个重要问题是目前没有多样性措施令人满意,尽管众所周知多样性在集合中起着重要作用。 如果这些问题能够得到很好的解决,集体学习将能够为更多的应用做出更多贡献。


参考文献:“Ensemble Learning” Zhi-Hua Zhou

Ensemble learning(集成学习)的更多相关文章

  1. 7. ensemble learning & AdaBoost

    1. ensemble learning 集成学习 集成学习是通过构建并结合多个学习器来完成学习任务,如下图: 集成学习通过将多个学习学习器进行结合,常可以获得比单一学习器更优秀的泛化性能 从理论上来 ...

  2. 6. Ensemble learning & AdaBoost

    1. ensemble learning 集成学习 集成学习是通过构建并结合多个学习器来完成学习任务,如下图: 集成学习通过将多个学习学习器进行结合,常可以获得比单一学习器更优秀的泛化性能 从理论上来 ...

  3. Ensemble_learning 集成学习算法 stacking 算法

    原文:https://herbertmj.wikispaces.com/stacking%E7%AE%97%E6%B3%95 stacked 产生方法是一种截然不同的组合多个模型的方法,它讲的是组合学 ...

  4. 机器学习:集成学习:随机森林.GBDT

    集成学习(Ensemble Learning) 集成学习的思想是将若干个学习器(分类器&回归器)组合之后产生一个新学习器.弱分类器(weak learner)指那些分类准确率只稍微好于随机猜测 ...

  5. 第七章——集成学习和随机森林(Ensemble Learning and Random Forests)

    俗话说,三个臭皮匠顶个诸葛亮.类似的,如果集成一系列分类器的预测结果,也将会得到由于单个预测期的预测结果.一组预测期称为一个集合(ensemble),因此这一技术被称为集成学习(Ensemble Le ...

  6. 7. 集成学习(Ensemble Learning)Stacking

    1. 集成学习(Ensemble Learning)原理 2. 集成学习(Ensemble Learning)Bagging 3. 集成学习(Ensemble Learning)随机森林(Random ...

  7. 6. 集成学习(Ensemble Learning)算法比较

    1. 集成学习(Ensemble Learning)原理 2. 集成学习(Ensemble Learning)Bagging 3. 集成学习(Ensemble Learning)随机森林(Random ...

  8. 5. 集成学习(Ensemble Learning)GBDT

    1. 集成学习(Ensemble Learning)原理 2. 集成学习(Ensemble Learning)Bagging 3. 集成学习(Ensemble Learning)随机森林(Random ...

  9. 3. 集成学习(Ensemble Learning)随机森林(Random Forest)

    1. 集成学习(Ensemble Learning)原理 2. 集成学习(Ensemble Learning)Bagging 3. 集成学习(Ensemble Learning)随机森林(Random ...

随机推荐

  1. ucosii任务切换OS_TASK_SW()

    stm32F103中任务切换定义 //任务切换宏,由汇编实现. #define OS_TASK_SW() OSCtxSw() os_cpu_a.asm中任务切换函数的定义 NVIC_INT_CTRL ...

  2. html-解决乱码问题

    1.创建HTML时,需将文件编码设置为UTF-8: 2.需要在<head>元素下,借用<meta>元素设置内容的编码: 1)文件的编码:在webstorm中设置文件编码的问题: ...

  3. Chrome插件之一键保存网页为PDF1.1发布

    最新版本:V1.1 下载地址:http://download.csdn.net/detail/bdstjk/5722317 http://pan.baidu.com/share/link?sharei ...

  4. DataUml Design 介绍8-DataUML 1.2版本正式发布(支持SQLite数据库、NetUML开发框架)

    DataUML 1.2版本在软件架构上有了很大的变化,目前DataUML支持Access.SQLite.MY SQL .ORACLE.MS SERVER2000.MS SERVER2005.MS SE ...

  5. 【LeetCode】 Rotate List 循环链表

    题目:rotate list 解法1: <span style="font-size:18px;">/**LeetCode Rotate List:Given a li ...

  6. Customize Netbeans Platform Splash Screen and About Dialog

    原帖一直打不开,通过谷歌翻译找到的 http://blogs.kiyut.com/tonny/2007/10/18/customize-netbeans-platform-splash-screen- ...

  7. 自定义View -- 柱状图 我也来自定义个柱状图来玩玩

    遇到要用到图的时候总是再找第三方开源,但有时这个图非常简单,用第三方开源来用的话有点得不偿失,所以我就自己撸了个柱状图出来 当然你如果觉得需求很复杂,那么你可以去使用这些开源 MPAndroidCha ...

  8. 检测手机中是否安装了google地图,没有则提示安装,并跳转到地图查找特定的地点

    /** * 检测手机中是否安装了某个特定的app,若没有提示安装 */ PackageInfo name_2 = null; try { // 若没有这个包名会异常 name_2 = getPacka ...

  9. poj 1270(dfs+拓扑排序)

    题目链接:http://poj.org/problem?id=1270 思路:就是一简单的dfs+拓扑排序,然后就是按字典序输出所有的情况. http://paste.ubuntu.com/59872 ...

  10. 转:: 刺鸟:用python来开发webgame服务端(5)

    来源:http://ciniao.me/article.php?id=19 --------------- 刺鸟原创文章,转载请注明出处    在前面的文章中,我们已经开始了不少逻辑功能的开发,在这期 ...