stacking方法也是集成学习的一个作弊一样的方法。

比bagging,boosting内容要少一点。

简介

Stacking(有时候也称之为stacked generalization)是指训练一个模型用于组合(combine)其他各个模型。即首先我们先训练多个不同的模型,然后再以之前训练的各个模型的输出为输入来训练一个模型,以得到一个最终的输出。如果可以选用任意一个组合算法,那么理论上,Stacking可以表示上面提到的各种Ensemble方法。然而,实际中,我们通常使用单层logistic回归作为组合模型。

虽然他很直观,但是没有语言描述确实很难搞懂。

上半部分是用一个基础模型进行5折交叉验证,如:用XGBoost作为基础模型Model1,5折交叉验证就是先拿出四折作为training data,另外一折作为testing data。注意:在stacking中此部分数据会用到整个traing set。如:假设我们整个training set包含10000行数据,testing set包含2500行数据,那么每一次交叉验证其实就是对training set进行划分,在每一次的交叉验证中training data将会是8000行,testing data是2000行。

每一次的交叉验证包含两个过程,1. 基于training data训练模型;2. 基于training data训练生成的模型对testing data进行预测。在整个第一次的交叉验证完成之后我们将会得到关于当前testing data的预测值,这将会是一个一维2000行的数据,记为a1。注意!在这部分操作完成后,我们还要对数据集原来的整个testing set进行预测,这个过程会生成2500个预测值,这部分预测值将会作为下一层模型testing data的一部分,记为b1。因为我们进行的是5折交叉验证,所以以上提及的过程将会进行五次,最终会生成针对testing set数据预测的5列2000行的数据a1,a2,a3,a4,a5,对testing set的预测会是5列2500行数据b1,b2,b3,b4,b5。

在完成对Model1的整个步骤之后,我们可以发现a1,a2,a3,a4,a5其实就是对原来整个training set的预测值,将他们拼凑起来,会形成一个10000行一列的矩阵,记为A1。而对于b1,b2,b3,b4,b5这部分数据,我们将各部分相加取平均值,得到一个2500行一列的矩阵,记为B1。

以上就是stacking中一个模型的完整流程,stacking中同一层通常包含多个模型,假设还有Model2: LR,Model3:RF,Model4: GBDT,Model5:SVM,对于这四个模型,我们可以重复以上的步骤,在整个流程结束之后,我们可以得到新的A2,A3,A4,A5,B2,B3,B4,B5矩阵。

在此之后,我们把A1,A2,A3,A4,A5并列合并得到一个10000行五列的矩阵作为training data,B1,B2,B3,B4,B5并列合并得到一个2500行五列的矩阵作为testing data。让下一层的模型,基于他们进一步训练。

以上即为stacking的完整步骤!

XGB模型,把train分train1~train5,共5份,用其中4份预测剩下的那份,同时预测test数据,这样的过程做5次,生成5份train(原train样本数/5)数据和5份test数据。然后把5份预测的train数据纵向叠起来,把test预测的结果做平均。

RF模型和XGB模型一样,再来一次。这样就生成了2份train数据和2份test数据(XGB重新表达的数据和RF重新表达的数据),然后用LR模型,进一步做融合,得到最终的预测结果。

左边部分为训练集,右边部分为测试集

依旧是以原来的label作为训练的target

为什么stacking高效呢?

可以这么理解,原本的多个模型训练的精度已经到达了一个程度,上不去了。众所周知,模型的精度在起初的时候上升总是较快,但是越到后面上升就越慢。举一个例子吧。有场马拉松,有10公里,一个人跑了7公里,实在跑不动了。这个时候裁判突然说,可以接力跑,他叫了个兄弟来帮他跑,剩下但3公里跑起来就轻松多了。就是这个道理,几个模型的精度达到了上限,从原始数据到target已经很困难了,无法在提高了,那我们就不训练原始数据了,从上一个模型的输出的直接去拟合target。就是这么作弊的一个东西。

个人感觉这东西容易过拟合,也有人试过多层的stacking效果不如层数少的,很大的可能性就是过拟合了。

参考:https://blog.csdn.net/willduan1/article/details/73618677/

https://blog.csdn.net/wstcjf/article/details/77989963

https://blog.csdn.net/qq_18916311/article/details/78557722

【机器学习】集成学习之stacking相关推荐

  1. Datawhale集成学习:Stacking 算法与实战

    前言 Stacking核心思想 stacking严格来说并不是一种算法,而是精美而又复杂的,对模型集成的一种策略. Stacking集成算法可以理解为一个两层的集成,第一层含有多个基础分类器,把预测的 ...

  2. 机器学习 集成学习篇——python实现Bagging和AdaBOOST算法

    机器学习 集成学习篇--python实现Bagging和AdaBOOST算法 摘要 Bagging算法 Adaboost算法 摘要 本文通过python实现了集成学习中的Bagging和AdaBOOS ...

  3. 机器学习 - [集成学习]Bagging算法的编程实现

    机器学习 - [集成学习] Bagging算法的编程实现 李俊才 的 CSDN 博客:https://blog.csdn.net/qq_28550263?spm=1001.2101.3001.5343 ...

  4. 基于机器学习中集成学习的stacking方式进行的金线莲质量鉴别研究(python进行数据处理并完成建模,对品种进行预测)

    1.前言 金线莲为兰科开唇兰属植物,别名金丝兰.金丝线.金耳环.乌人参.金钱草等,是一种名贵中药材,国内主要产地为较低纬度地区如:福建.台湾.广东.广西.浙江.江西.海南.云南.四川.贵州以及西藏南部 ...

  5. 机器学习--集成学习--Bagging,Boosting,Stacking

    在一些数据挖掘竞赛中,后期我们需要对多个模型进行融合以提高效果时,常常会用到Bagging,Boosting,Stacking等这几个框架算法.下面就来分别详细讲述这三个框架算法.这里我们只做原理上的 ...

  6. 机器学习--集成学习Stacking算法23

    什么是Stacking 使用多个不同的分类器对训练集进预测,把预测 得到的结果作为一个次级分类器的输入.次级分 类器的输出是整个模型的预测结果. Stacking需要训练两层分类器,第一层的初级分类器 ...

  7. 机器学习集成学习与模型融合!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:李祖贤,深圳大学,Datawhale高校群成员 对比过kaggle ...

  8. 【机器学习基础】浅析机器学习集成学习与模型融合

    作者:李祖贤,深圳大学,Datawhale高校群成员 对比过kaggle比赛上面的top10的模型,除了深度学习以外的模型基本上都是集成学习的产物.集成学习可谓是上分大杀器,今天就跟大家分享在Kagg ...

  9. 深度学习auc_机器学习集成学习与模型融合!

    ↑↑↑关注后"星标"Datawhale每日干货 & 每月组队学习,不错过Datawhale干货 作者:李祖贤,深圳大学,Datawhale高校群成员 对比过kaggle比赛 ...

最新文章

  1. 蓝桥杯来了?最后节点了,这不得共享一波资源?
  2. 保镖机器人作文_我的保镖作文500字
  3. 我的同学是计算机作文,同学相见作文
  4. eclipse+pydev快捷键
  5. 【数据结构与算法】之深入解析“字符串转换整数 (atoi)”的求解思路和算法示例
  6. php rss xml,php 一个完全面向对象的RSS/XML类的简单示例
  7. matplotlib 绘图代码库(自用)
  8. String字符串按多个字符Split方法
  9. rails--bcrypt对密码加密
  10. plist文件的读写
  11. 【DSP】CCS 5.5的安装教程
  12. Java、JSP网上购物管理系统
  13. Android Binder 机制详解
  14. java 下载压缩文件后打开报 不可预料的压缩文件末端
  15. 砂糖橘文案:水果砂糖橘的文案,水果文案砂糖橘
  16. 4.直方图介绍和使用|MySQL索引学习
  17. H5新增input属性值
  18. error: src refspec master does not match any. 错误的解决办法
  19. Android N App分屏模式完全解析
  20. matlab中弹性碰撞课程设计,完全弹性碰撞 matlab

热门文章

  1. DNS 服务器地址大全
  2. Silverlight初级教程系列
  3. linux提示符目录变为~,Linux终端提示符路径长度的修改方法
  4. find命令过滤 no such_linux find -exec rm -r 报No such file or directory
  5. python列表的索引算法_Python-确定列表是否对称的算法
  6. echarts定时加载动画数据
  7. 关于OpenCV的Mat画图问题
  8. jquery 赋值时不触发change事件解决
  9. 从exe4j生成的exe中抽取jar文件
  10. Android 游戏开发 View框架