Stacking 是机器学习中,集成学习的一种方法。集成的好处是不同的模型可以学习到数据的不同特征,经过融合后的结果往往能有更好的表现,大有取长补短的意思。

  • 基本理解

这种方法的思想比较简单,在不知道它之前,我们可能在设计算法的时候就会想到这种结构了,下面是我对这个算法的理解:

这个结构我们都很熟悉,十分像神经网络中上层神经元到它的一个下层神经元的结构。如果按这种方法,x1-x4是上层的权重,e1是这个神经元的激活函数,并输出神经元的值。不同的是,对于每个x1-x4,输入都是一样的。

而对于集成学习来说,我们只需要把关键的x1 - x4 以及 e1 换成模型就好了。换句话说,最终整个模型的流程如下:

即将所有数据使用n个模型进行预测,再将预测的结果取平均值,作为特征值输入给第n+1个模型,最终的输出由Model(n+1)决定。

  • 模型选择

可以看到,Stacking的结构在构成上就已经非常复杂(因为我们在图中过滤了每个model的内部结构),那么当我们真正使用这个结构的时候,是如何进行训练的正常运行,保证结构的合理性而不会过拟合呢。这一部分参考了许多网上的资料,包括知乎、CSDN和其他的博客园的内容,大家都是相互引用,我就不一一引用了哈。

在这里我们首先分步考虑每个模型的训练过程:

对于Model1 - Model n,他们是第一层的模型,普遍来讲,我们可以选择的有:

第一层模型:

  • Xgboost
  • LightGBM
  • RandomForest
  • GBDT
  • ExtraTrees
  • ...

这里可以看出,第一层的模型都是强模型,至于为什么,可以从几个方面考虑:

  1. 最简单的思想就是马后炮,如果第一层使用了一个弱模型,则整个模型的表现会被大大影响,准确率大打折扣。
  2. 当然光是马后炮是不管用的,首先,我们考虑我们对第一层模型的需求,因为Stacking的思想是取长补短,而不同的强模型对于相同的数据以及数据分布都是从不同的角度出发的,所以我们需要不同角度的数据进行汇总和学习,获得更好的结果。
  3. 结合上面两点,我们对第一层的模型要求应该是:效果准确,结构不同。所以我们应当选择的是结构不同的强模型。

另外,是否使用Stacking也有几点需要注意:

  1. 数据集是否够大。stacking不一定对极小的数据集有效,这与它的训练过程有关,如果一共就200个数据,在训练过程中就要首先分为训练集和测试集,所有训练集又要分为n-fold,导致每个fold可能就只有20个数据,最终结果是无法保证效果的。
  2. 第一层的model数要够多。为什么要够多呢,这里主要是考虑第二层模型的训练问题,Stacking精巧的训练过程需要将第一层的model输出合并为第二层的model_(n+1)的输入,即第一层的model数N决定了第二层model_(n+1)的输入特征维数,如果想要第二层得到充分训练,那么N的维数取1或者2肯定是不够的。(如下图所示)

  3. 从知乎转:理论上看,通用的stacking模型已经证明其集成结果应该“渐进等价”第一层中的最优子模型,所以stacking的结果不应该有大幅度的下降。换句话说,如果你用了stacking,效果变差了,就优先考虑上面两条,然后再好好检查下自己的第一层model中有没有效果很差的model拉低了整体的表现。

那么到这里基本搞定了第一层的模型选择,我们再看第二层。说是第二层,其实就是一个model_(n+1)。对于这一层的算法,我觉得可以有很多不同的理解:

  • 可以认为是第一层做的是特征变换,第二层做的才是结果预测;
  • 也可以认为第一层是各个模型进行预测,第二层进行结果筛选;
  • 或者第一层是模型预测,第二层是置信度的打分和加权平均。

但无论如何第二层做的计算一定是决定如何输出结果的,因为第一层的模型其实已经十分好了(强模型),在第二层,我们应该使用的是较为简单的模型,所以这里我们有一个非常普遍的选择,就是:LR模型,Linear Regression。当然这个选择也不绝对,可以使用不同的模型进行最后的输出决策,但是这个模型最好是简单的模型,以防止整体模型的过拟合。

对于LR模型,下篇博客再好好介绍一下。这里,我们就先看下整体模型是如何进行训练的。

  • 训练过程

突然意识到应该先写训练过程再写模型选择的,会更好理解。但是也没有无妨,如果你理解了上面的内容,那下面的过程一看就会明白。

首先我们需要知道机器学习中 K-Fold 的训练过程是怎样的,即把一个数据集分为K份,再将每一份作为测试集,其余作为训练集,训练K次,最终的结果的准确度或取值是这K次结果的均值,一张图表达:

而在Stacking中,每个model都会做一个K-Fold预测,那么Stacking的训练过程也就变为了:

可以看到,第一层模型经过K-Fold 训练后得到的所有数据连在一起,成为了Model_(n+1)的训练集。

但不难发现的是,Model_(n+1)只有训练集,没有测试集。因为K-fold中每个测试集的结果都变成了Model_(n+1)的训练集。所以在最最最最最最开始,我们就需要将整体数据分为测试集和训练集。那么最终,Stacking的整体结构为:

到此,Stacking的结构就结束了,具体如何用代码实现,是一个很枯燥难顶的过程,因为我是使用Stacking做回归,所以如果完成,会把实现代码贴上来。

完结!

Stacking:集成学习策略图解相关推荐

  1. 机器学习集成模型学习——Stacking集成学习(五)

    stacking集成模型示例如下: stacking一般由2层堆叠构成 Stacking集成算法思路 上图为整体流程,思路如下: 把原始数据切分成两部分:训练集D-train与测试集D-test,训练 ...

  2. stacking集成模型预测回归问题

    前言 关于各种集成模型,已经有很多文章做了详细的原理介绍.本文不再赘述stacking的原理,直接通过一个案例,使用stacking集成模型预测回归问题. 本文通过学习一篇stacking继承学习预测 ...

  3. 论文解读:4mCBERT:基于集成学习策略,通过序列和化学衍生信息识别DNA n4 -甲基胞嘧啶位点的计算工具

    Title:4mCBERT: A computing tool for the identification of DNA N4-methylcytosine sites by sequence- a ...

  4. Stacking集成学习算法

    由于Blending在集成过程中只会用到验证集的数据,对数据的利用效率低,为了解决这个问题,可以引入交叉验证的方式.Stacking集成学习算法就是基于这个想法. 首先将所有数据分为训练集和测试集,假 ...

  5. Stacking 集成学习在多因子选股中的应用

    Stacking 集成学习模型简介 Stacking 集成学习的原理 Stacking 是一种常见的集成学习框架.一般来说,Stacking 将训练一个多层(一般是两层, 本文中默认两层)的模型结构, ...

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

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

  7. 基于Python的Stacking集成机器学习实践

    [翻译自 : Stacking Ensemble Machine Learning With Python] [说明:Jason Brownlee PhD大神的文章个人很喜欢,所以闲暇时间里会做一点翻 ...

  8. 基于 Python 的 Stacking 集成机器学习实践

    Stacking或Stacked Generalization是一种集成的机器学习算法.它使用元学习算法来学习如何最佳地组合来自两个或多个基础机器学习算法的预测.堆叠的好处在于,它可以利用分类或回归任 ...

  9. 【深度学习】如何将Voting和Stacking等应用到神经网络模型

    [深度学习]如何将Voting和Stacking等应用到神经网络模型 1 网络"快照"集成法(snapshot ensemble) 2 多模型集成 3 投票 4 Stacking: ...

  10. 集成学习python_从Boosting到Stacking,概览集成学习的方法与性能

    集成学习(Ensemble learning)通过组合几种模型来提高机器学习的效果.与单一模型相比,该方法可以提供更好的预测结果.正因为如此,集成方法在许多著名的机器学习比赛(如 Netflix.KD ...

最新文章

  1. 数据科学家需要了解的5大聚类算法
  2. 论文笔记:HKMF-T: Recover From Blackouts in TaggedTime Series With Hankel Matrix Factorization
  3. Linux-makefile
  4. FTP在aliyun上使用经验
  5. C#中控制线程池的执行顺序
  6. 螃蟹为什么横着走,今天为大家介绍为什么螃蟹横着走
  7. MongoDB集群构建
  8. 并发控制常见手段-----乐观锁和悲观锁
  9. python必备入门代码-初学必备:1分钟带你认识Python的代码(上)
  10. [渝粤教育] 广东-国家-开放大学 21秋期末考试大数据营销10138k2
  11. Java代码如何运行在Java虚拟机中
  12. 远程查看计算机的mac地址,win8系统下如何获取远程电脑MAC地址
  13. analogWrite怎么做PWM输出?改PWM频率(定时器相关)
  14. 【光线追踪系列十七】直接光源采样
  15. 【白皮书】用于过程工业的PROFINET
  16. Linux下使用 tc 模拟网络延迟和丢包
  17. php ajax传递数组,ajax怎样传递数组到后台
  18. SaaS前端规范架构
  19. 来看看国外DBA的工资
  20. 《Effective Java》读书笔记,flutter游戏开发

热门文章

  1. 制作分页工具类,实现分页操作JSP+Servlet+数据库
  2. 启动rabbitmq
  3. webview防止跳转到浏览器
  4. 04、Hadoop框架HDFS NN、SNN、DN工作原理
  5. python获取工作目录路径为C:\Users\用户名\AppData\Local\Temp...解决方案
  6. linux 串口/dev/ttyS0测试(UART0)
  7. Qt实现柱状图、饼状图、折线图、曲线图
  8. 创建一个新用户身份为计算机管理员,以Guest账户身份创建一个管理员
  9. 基于SSM实现的儿童疫苗信息管理系统设计与实现 毕业设计-附源码311930
  10. 大数据之道 HMM系列