集成学习(Ensemble learning)通过组合几种模型来提高机器学习的效果。与单一模型相比,该方法可以提供更好的预测结果。正因为如此,集成方法在许多著名的机器学习比赛(如 Netflix、KDD 2009 和 Kaggle 比赛)中能够取得很好的名次。

集成方法是将几种机器学习技术组合成一个预测模型的元算法,以达到减小方差(bagging)、偏差(boosting)或改进预测(stacking)的效果。

集合方法可分为两类:序列集成方法,其中参与训练的基础学习器按照顺序生成(例如 AdaBoost)。序列方法的原理是利用基础学习器之间的依赖关系。通过对之前训练中错误标记的样本赋值较高的权重,可以提高整体的预测效果。

并行集成方法,其中参与训练的基础学习器并行生成(例如 Random Forest)。并行方法的原理是利用基础学习器之间的独立性,通过平均可以显著降低错误。

大多数集成方法使用单一基础学习算法来产生同质的基础学习器,即相同类型的学习器,为同质集成。

还有一些使用异构学习器的方法,即不同类型的学习器,为异构集成。为了使集成方法比其中的任何单一算法更准确,基础学习器必须尽可能准确和多样化。

Bagging

Bagging 是 bootstrap aggregation 的缩写。一种减小估计方差的方法是将多个估计值一起平均。例如,我们可以在不同的数据子集上训练 M 个不同的树(随机选择)并计算集成结果:

Bagging 使用 bootstrap 抽样来获取训练基础学习器的数据子集。Bagging 使用投票分类和均值回归来聚合得到基础学习者的输出。

我们可以在 Iris 数据集上研究 bagging 方法的分类效果。为了对比预测效果,我们选用两个基准估计器:决策树和 k-NN 分类器。图 1 显示了基准估计器和 bagging 集成算法在 Iris 数据集上的学习决策边界。

准确率:0.63(+/- 0.02)[决策树]

准确率:0.70(+/- 0.02)[K-NN]

准确率:0.64(+/- 0.01)[bagging 树]

准确率:0.59(+/- 0.07)[bagging K-NN]

决策树的决策边界与轴并行,而 K-NN 算法在 k=1 时决策边界与数据点紧密贴合。Bagging 集成了 10 个基础估计器进行训练,其中以 0.8 的概率抽样训练数据和以 0.8 的概率抽样特征。

与 k-NN bagging 集成相比,决策树 bagging 集成实现了更高的准确率。K-NN 对训练样本的扰动较不敏感,因此被称为稳定学习器。集成稳定学习器不利于提高预测效果,因为集成方法不能有助于提高泛化性能。

最右侧的图还显示了测试集的准确率如何随着集成的大小而提高。根据交叉验证的结果,我们可以看到准确率随着估计器的数量而增加,一直到约 10 个基础估计器时达到最大值,然后保持不变。因此对于 Iris 数据集,添加超过 10 个的基本估计器仅仅增加了计算复杂度而不增加准确率。

我们还可以看到 bagging 树集成的学习曲线。注意训练数据的平均误差为 0.3,测试数据为 U 形误差曲线。训练误差和测试误差之间的最小差距出现在训练集大小的 80%左右的位置。常用的集成算法类是随机森林。

在随机森林中,集成中的每棵树都是由从训练集中抽取的样本(即 bootstrap 样本)构建的。另外,与使用所有特征不同,这里随机选择特征子集,从而进一步达到对树的随机化目的。

因此,随机森林产生的偏差略有增加,但是由于对相关性较小的树计算平均值,估计方差减小了,导致模型的整体效果更好。

在非常随机化树(extremely randomized trees)算法中,进一步增加随机性:分割阈值是随机的。与寻找最具有区分度的阈值不同,每个备选特征的阈值是随机选择的,这些随机生成的阈值中的最佳值将作为分割规则。这通常能够减少模型的方差,但代价是偏差的略微增加。

Boosting

Boosting 是指能够将弱学习器转化为强学习器的一类算法族。Boosting 的主要原理是适应一系列弱学习器模型,这些模型只是稍微优于随机猜测,比如小决策树——数据加权模型。更多的权重赋值早期训练错误分类的例子。

然后通过结合加权多数投票(分类)或加权求和(回归)以产生最终预测。Boosting 与 bagging 等方法的主要区别是基础学习器通过加权的数据进行顺序训练。

下面的算法阐述了最广泛使用的 boosting 算法形式,称为 AdaBoost,是 adaptive boosting 的缩写。

我们看到第一个基础分类器 y1(x) 使用全部相等的权重进行训练。在随后的 boosting 训练中,增加错误分类的数据点的系数权重,同时减少正确分类的数据点的系数权重。

数值 epsilon 表示每个基础分类器的加权误差率。因此,系数权重 alpha 对更准确的分类器赋值更大的权重。

AdaBoost 算法如上图所示。每个基础学习器由深度为 1 的决策树组成,从而基于特征阈值对数据进行分类,该特征阈值将空间分割成由与一个轴平行的线性决策表面分开的两个区域。该图还显示了测试集的准确率随集合大小的增加而改善,同时显示了训练数据和测试数据的学习曲线。

梯度 boosting 树(Gradient Tree Boosting)是 boosting 使用任意可微分损失函数的推广。它可以用于回归和分类问题。梯度 Boosting 以顺序的方式构建模型。

在每一步,给定当前的模型 Fm-1(x),决策树 hm(x) 通过最小化损失函数 L 更新模型:

回归和分类算法在使用的损失函数的类型上有所不同。

Stacking

Stacking 是一种集成学习技术,通过元分类器或元回归聚合多个分类或回归模型。基础层次模型(level model)基于完整的训练集进行训练,然后元模型基于基础层次模型的输出进行训练。

基础层次通常由不同的学习算法组成,因此 stacking 集成通常是异构的。下面的算法概括了 stacking 算法的逻辑:

下面是几种算法的准确率,表示在上图右边的图形中:

准确率:0.91(+/- 0.01)[K-NN]

准确率:0.91(+/- 0.06)[随机森林]

准确率:0.92(+/- 0.03)[朴素贝叶斯]

准确率:0.95(+/- 0.03)[Stacking 分类器]

stacking 集成如上图所示。它由 k-NN、随机森林和朴素贝叶斯基础分类器组成,它的预测结果由作为元分类器的 Logistic 回归组合。我们可以看到 stacking 分类器实现的混合决策边界。该图还显示,stacking 能够实现比单个分类器更高的准确率,并且从学习曲线看出,其没有显示过拟合的迹象。

在 Kaggle 数据科学竞赛中,像 stacking 这样的技术常常赢得比赛。例如,赢得奥托(Otto)集团产品分类挑战赛的第一名所使用的技术是集成了 30 多个模型的 stacking,它的输出又作为三个元分类器的特征:XGBoost、神经网络和 Adaboost。有关详细信息,请参阅以下链接:https://www.kaggle.com/c/otto-group-product-classification-challenge/discussion/14335。

代码

生成文中所有图片的代码详见 ipython notebook:https://github.com/vsmolyakov/experiments_with_python/blob/master/chp01/ensemble_methods.ipynb。

结论

除了本文研究的方法之外,深度学习也常常通过训练多样化和准确的分类器运用集成学习方法。其中,可以通过改变架构、超参数设置和训练技术来实现多样性。

集成学习非常成功,该算法不仅在挑战性的数据集上频频打破性能方面的记录,而且是 Kaggle 数据科学竞赛的获奖者常用的方法之一。

集成学习python_从Boosting到Stacking,概览集成学习的方法与性能相关推荐

  1. 树模型系列之集成学习(Bagging、Boosting、Stacking)

    文章目录 树模型系列之集成学习(Bagging.Boosting.Stacking) bagging Boosting Stacking 偏差与方差 集成学习的偏差与方差 Bagging 的偏差与方差 ...

  2. 集成学习——Bagging、Boosting、Stacking

    目录 偏差与方差 投票法 集成学习 Bagging Bootstraps Bagging Boosting 基本概念 Adaboost 前向分步算法 梯度提升树(GBDT) XGBoost Light ...

  3. 机器学习(4):集成算法(Bagging、Boosting、Stacking)

    目录 一.Bagging模型:随机森林 1.1 bagging的原理 1.2 随机森林算法 Random Forest 1.3 随机森林的推广:极限随机数 extra trees 二.Boosting ...

  4. 集成学习(Ensemble Learning),Bagging、Boosting、Stacking

    1 集成学习概述 1.1 概述 在一些数据挖掘竞赛中,后期我们需要对多个模型进行融合以提高效果时,常常会用Bagging,Boosting,Stacking等这几个框架算法,他们不是一种算法,而是一种 ...

  5. 集成学习(bagging/boosting/stacking)BERT,Adaboost

    文章目录 集成学习(ensemble learning) 1.bagging(装袋法) 2.boosting(提升法) 3.stacking(堆叠法) 集成学习(ensemble learning) ...

  6. 集成学习(Bagging、Boosting、Stacking)算法原理与算法步骤

    集成学习 概述 严格意义上来说,集成学习算法不能算是一种机器学习算法,而像是一种模型优化手段,是一种能在各种机器学习任务上提高准确率的强有力技术.在很多数据挖掘竞赛中,集成学习算法是比赛大杀器,能很好 ...

  7. 集成学习算法总结----Boosting和Bagging

    集成学习 基本思想:如果单个分类器表现的很好,那么为什么不适用多个分类器呢? 通过集成学习可以提高整体的泛化能力,但是这种提高是有条件的: (1)分类器之间应该有差异性: (2)每个分类器的精度必须大 ...

  8. 在日本山区流域使用支持向量机和 bagging、boosting 和 stacking 集成机器学习框架改进滑坡评估--文献阅读

    为了在基于过程的模型中准确表示边坡稳定性,有必要包含大量涉及滑坡几何形状和内部结构的局部特征的特征.这包括但不限于斜坡的分层和不连续性.运动裂缝.裂片.陡坡.地垒/地堑结构.降雨.空气和土壤温度.土壤 ...

  9. 机器学习集成方法Bagging、Boosting和Stacking

    一. 概述 集成学习是一种训练多个弱学习器从而得到更好预测结果的方法.一般情况来说,集合弱学习器可以得到更准确更强力的模型. 1. 弱学习器 弱学习器,弱学习器常指泛化性能略优于随机猜测的学习器,例如 ...

最新文章

  1. java 调用solr服务器_Solr环境搭建及IK分词的集成及solrJ的调用(一)
  2. 服务器监控工具_系统管理员不可错过的 6 款服务器监控工具
  3. 直播预告 | 旷视研究院王毅:用于条件图像生成的注意力归一化
  4. 4G U盘版64位bitcoin专用挖矿操作系统
  5. YTU 1009: University
  6. LINQ to JavaScript
  7. rsa前后端加密流程_不懂前后端分离?这篇就够了
  8. [转载] Python中NumPy简介及使用举例
  9. MVC中的service controller 有状态,无状态Bean线程安全
  10. ecplise git修改提交信息_Eclipse中Git的使用说明之一:使用Git上传新项目到远程仓库...
  11. 小米路由器青春版刷潘多拉、华硕固件
  12. iOS 新浪新闻首页卡片滚动特效实现
  13. 证明左右特征向量正交
  14. android m1卡读写
  15. centos使用xfreerdp登录报错
  16. 路由器工作原理及路由、路由表
  17. 乐高全遥控布加迪威龙搭载超强7+1档乐高变速箱
  18. 【更新】京东、美团、饿了么获取cookies
  19. AAAI-21-DocRE-Document-Level Relation Extraction with Adaptive Thresholding and Localized Context Po
  20. git 更新某个目录或文件

热门文章

  1. Typescript尝试
  2. Heap(堆结构/优先队列)-Swift实现
  3. create-react-app部署到GitHub Pages时报错:Failed to get remote。origin.url
  4. workspace-project-target关系与解耦工程结构总结
  5. DS4700电池更换步骤
  6. HBase基础和伪分布式安装配置
  7. Visual Studio 2008 中使用插件Extjs提示的方法
  8. NCNE二级复习资料-网络监视、管理和排错
  9. 使.NET WebBrowser不与IE或其他实例共享cookie
  10. 大量多风格多功能后台管理模板