集成学习之Stacking(堆栈)方法

这篇具有很好参考价值的文章主要介绍了集成学习之Stacking(堆栈)方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


集成学习(Ensemble learning)

集成学习是监督式学习的一种。 在机器学习中,监督式学习(Supervised learning)算法目的是从一堆”假设”即假设空间(hypothesis space)中搜索一个具有较好且相对稳定的预测效果的模型。但很多情况下,即使”假设”空间中包含了一些很好的”假设”(hypothesis) ,我们也很难从中找到一个较好的。而集成学习的目的就是通过组合许多个弱模型(weak learners,预测效果一般的模型) 以得到一个强模型(strong learner,预测效果好的模型)。

对于大数据集(数据充足)和小数据集(数据不充足)的情况,集成学习方法都有一些比较好的策略来进行训练。

  • 对于大数据集,可以按照一定策略划分成多个小数据集,对每个数据集训练一个基模型后再进行组合;
  • 对于小数据集,可以利用Bootstrap(自助法,一种有放回的抽样方法)进行抽样,得到多个数据集,分别训练基模型之后再进行组合。

理论上来讲,使用集成学习的方法在评估测试时,相比于单一模型是需要更多的计算的。因此,有时集成学习也被认为是使用更多的计算来弥补弱模型的性能,此外,由于集成学习所含的参数量较大,导致模型中每个参数所包含的信息比单一模型要少很多,也就导致了太多的冗余。

集成学习的技术主要有BaggingBoosting以及Stacking等,本文主要对Stacking技术进行讲解分析。

Stacking(堆栈)方法定义

在了解Stacking方法之前,需对Bagging方法有个简要的认知。Bagging方法是利用bootstrap方法从整体数据集中采取有放回抽样得到N个数据集,在每个数据集上学习出一个基模型。最后的预测结果利用N个模型的输出得到,具体地方式为: 分类问题采用N个模型预测投票的方式,回归问题采用N个模型预测平均的方式。Bagging背后的思想是结合多个模型的结果来获得泛化的结果,采取Bootstrap采样使得Bagging方法的训练集具有随机性,各个基分类器(基模型)也相互独立,从而可以减少过拟合的发生。

Stacking方法的基础思想与Bagging类似,都是结合多个模型的输出来完成最后的预测。但是与Bagging方法相比,有以下不同:

  • Bagging是采取投票或平均的方式来处理N个基模型的输出,而Stacking方法是训练一个模型用于组合之前的基模型。具体过程是将之前训练基模型的输出构造为一个训练集,以此作为输入来训练一个模型,以获得最终的输出。
  • Bagging中每个基模型的训练集是通过bootstrap抽样得到的,不尽相同。而Stacking方法中每个模型的训练集是一样的,使用全部的训练集来训练。 使用Stacking方法时,常常采用交叉验证的方法来训练基模型。

在Stacking方法中,有两个阶段的模型。 第一个阶段的模型是以原始训练集为输入的模型,叫做基模型(也叫 level-0 模型),可以选取多种基模型进行训练。第二个阶段的模型是以基模型在原始训练集上的预测作为训练集以基模型在原始测试集上的预测作为测试集,叫做元模型(也叫 level-1 模型)

下面是一个简单的Stacking算法模型架构。c1, …,cm是基分类器(基模型),每一个基分类器的训练集都是完整的原始训练集。对每一个基分类器都训练T个epoch,在训练完他们之后,将(c1, …,cm)对原始training set在T次epoch过程中的所有输出(p1, …,pm)合并在一起,作为新的训练集来训练第二个阶段的模型——元分类器。
stacking算法,机器学习,集成学习,机器学习,人工智能
算法的伪代码[1]如下所示。
stacking算法,机器学习,集成学习,机器学习,人工智能

Stacking中的交叉验证

在实际使用Stacking方法时,为了避免过拟合的风险,常常伴随着交叉验证操作,以下面这张经典的图来解释[2]。这张图表示训练模型时使用5折交叉验证,Model1、Model2(还可以有Model3、Model4等)是不同的机器学习模型,比如随机森林、KNN、朴素贝叶斯、决策树等。假如整个数据集有12500行数据,训练集(Training set)包含10000行数据,测试集包含2500行数据。因为是5折交叉验证,训练集会被划分为5份。以Model1的训练为例,需对Model1进行5次训练,每次挑选一份作为验证集,即每次的训练集为8000行(10000*4/5),验证集为2000行(10000 *1/5)。Model1经过第一次训练后,在验证集上的输出记作a1(2000行),在测试集上的输出记作b1(2500行),经过第二次训练后,在验证集上的输出记作a2(2000行),在测试集上的输出记作b2(2500行)。以此类推,Model1经过五折交叉验证后,会得到a1,a2,a3,a4,a5,和b1,b2,b3,b4,b5。a1,a2,a3,a4,a5即Model1每次经过训练后在验证集上的输出结果,将他们拼接在一起得到A1,即Model1训练后在完整原始训练集上预测的结果。b1,b2,b3,b4,b5即Model1每次经过训练后在测试集上的输出结果,将他们相加之后求平均得到B1,即Model1训练后在完整原始测试集上预测的结果。
stacking算法,机器学习,集成学习,机器学习,人工智能
以上是Model1的五折交叉验证,经过训练之后得到了A1,B1。对其他的基模型进行同样的操作,假设我们的level-0模型中共包含五个基模型,那么经过上面的操作后,我们就会得到A1、A2、A3、A4、A5,和B1、B2、B3、B4、B5。此时我们再将A1、A2、A3、A4、A5合并在一起作为训练集,将B1、B2、B3、B4、B5作为测试集,来训练和测试我们的level-1模型(元模型)。这样就以五折交叉验证的方式实现了Stacking方法。

Stacking中的过拟合问题

从本质上来讲,Stacking方法其实是一种表示学习[3] 表示学习指的是模型从原始数据中自动抽取有效特征的过程,比如深度学习就是一种表示学习的方法。在机器学习的问题中,原始数据往往是杂乱无规律的,在stacking方法中,通过第一层的多个学习器后,有效的特征被学习了出来,然后再输入至第二层的元模型中进行学习,这样效果就会很好。从这个角度来看,stacking的第一层就是特征抽取的过程。这一点与神经网络非常的相似,具体可参考「Stacking」与「神经网络」。

在神经网络中,如影随形的就是过拟合问题,在Stacking方法中也不例外。周志华教授也声明在Stacking在使用中常常会出现过拟合问题,因为第二层的特征来自于对于第一层数据的学习,那么第二层数据中的特征中不该包括原始特征,以降低过拟合的风险。所以第二层的数据特征应该仅包含学习到的特征,而不应该包含原始特征。 也正是因为Stacking方法中常常出现过拟合问题,所以在使用Stacking方法才会经常伴随着交叉验证操作来避免过拟合。

其他

在Stacking和Bagging方法中,每个基模型可以选取任意一种机器学习模型,比如KNN、朴素贝叶斯、决策树、SVM、逻辑回归等。经验上来说,如果待组合的各个基模型之间差异性(diversity )比较显著,那么Ensemble之后通常会有一个较好的结果,因此也有很多Ensemble的方法致力于提高待组合模型间的差异性。尽管不直观,但是越随机的算法(比如随机决策树)比有意设计的算法(比如熵减少决策树)更容易产生强分类器。然而,在实际使用中,发现使用多个强学习算法比那些为了促进多样性而做的模型更加有效。

从组合策略的角度来看,理论上,Stacking方法可以表示为Bagging、Boosting这两种方法,只需要采样合适的模型组合策略即可,但是在实际使用中,我们一般采用的是Logistic回归作为组合策略。

总的来说,Stacking 方法比任何单一模型的效果都要好,而且不仅成功应用在了监督式学习中,也成功应用在了非监督式(概率密度估计)学习中。甚至应用于估计bagging模型的错误率。目前在各种机器学习的比赛中,排名较高的模型一般也都会使用Stacking的技巧。


[1]. Tang, J., S. Alelyani, and H. Liu. “Data Classification: Algorithms and Applications.” Data Mining and Knowledge Discovery Series, CRC Press (2015): pp. 498-500.
[2] 【机器学习】集成学习之stacking
[3] 「Stacking」与「神经网络」文章来源地址https://www.toymoban.com/news/detail-788884.html

到了这里,关于集成学习之Stacking(堆栈)方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 集成学习之GBDT算法详解

    先说一下提升树(Boosting Decision Tree):通过拟合残差的思想来进行提升,残差 = 真实值 - 预测值,例如: 某人年龄为100岁,预测其年龄 第一次预测结果为80岁,残差为100-80=20 第二次预测以残差20为目标,预测结果为16岁,残差为4 第三次预测以残差4为目标,预测结果为3.2,残差

    2024年01月17日
    浏览(29)
  • jstack(Stack Trace for Java)Java堆栈跟踪工具

    jstack(Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照(一般称为 threaddump 或者 javacore文件 )。 线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的目的通常是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源

    2024年02月12日
    浏览(48)
  • 【数据结构 C语言版】第四篇 栈、堆栈、Stack(超级详细版)

    写在前面 更新情况记录: 最近更新时间 更新次数 2022/10/18 1 参考博客与书籍以及链接: (非常感谢这些博主们的文章,将我的一些疑问得到解决。) 参考博客链接或书籍名称 《数据结构》陈越 代码随想录 总目录:目前数据结构文章太少,没有写。 正文 如果你c语言还有困

    2023年04月09日
    浏览(27)
  • 使用 Docker Swarm(集群) 和Docker Stack(堆栈)部署容器化应用

    说到集群,第一个想到的就是k8s,但docker官方也提供了集群和编排解决方案,它允许你将多个 Docker 主机连接在一起,形成一个“群集”(Swarm),并可以在这个 Swarm 上运行和管理你的服务。 与Kubernetes相比,Docker Swarm的群集管理功能相对简单,Swarm更适合于小型到中型的容器

    2024年04月25日
    浏览(25)
  • 机器学习之十大经典算法

    机器学习算法是计算机科学和人工智能领域的关键组成部分,它们用于从数据中学习模式并作出预测或做出决策。本文将为大家介绍十大经典机器学习算法,其中包括了线性回归、逻辑回归、支持向量机、朴素贝叶斯、决策树等算法,每种算法都在特定的领域发挥着巨大的价

    2024年02月15日
    浏览(34)
  • 机器学习之协同过滤算法

    协同过滤是一类常用于推荐系统的机器学习算法,它基于用户行为历史或物品属性来推荐用户可能感兴趣的物品。协同过滤算法主要分为两种类型:基于用户的协同过滤和基于物品的协同过滤。 协同过滤的优点在于它不需要关于物品或用户的领域知识,而是通过挖掘用户行为

    2024年01月18日
    浏览(34)
  • 机器学习之LDA算法

    目录 LDA算法 LDA目标 LDA原理推导 LDA除法模型 LDA减法模型 LDA除法正则模型 LDA减法正则模型 证明:St=Sw+Sb LDA算法流程 LDA优点 LDA缺点 基于LDA的人脸识别 线性判别分析(linear discriminant analysis,LDA), 是一种经典的线性学习方法,其原理是:给定训练样例集,设法将样例投影到

    2024年02月11日
    浏览(26)
  • 机器学习之回归算法-逻辑回归

    1.1、概念 是一种名为“回归”的线性分类器,是由线性回归变化而来的,一种广泛使用于分类问题中的广义回归算法。 1.2、按预测标签的数据类型分 连续型变量: 通过线性回归方程z,线性回归使用输入的特征矩阵X来输出一组连续型的标签值y_pred,以完成各种预测连续型变

    2024年02月04日
    浏览(30)
  • 机器学习之蚁群算法

    机器学习中的蚁群算法是一种启发式算法,灵感来源于蚁群在寻找食物时的行为。这种算法模拟了蚂蚁群体的集体智慧,通过多个个体之间的相互合作来解决问题。蚁群算法通常用于解决优化问题,例如路径规划、任务分配和调度等。 基本思想是通过模拟蚂蚁在搜索过程中释

    2024年01月19日
    浏览(28)
  • 机器学习之——CART决策树算法

    目录 一、CART决策树算法简介 二、基尼系数 三、决策树的生成 CART(Classification And Regression Trees 分类回归树)算法是一种树构建算法,既可以用于分类任务,又可以用于回归。相比于 ID3 和 C4.5 只能用于 离散型数据 且只能用于分类任务,CART 算法的适用面要广得多,既可用于

    2024年04月13日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包