读懂stacking:模型融合Stacking详解/Stacking与Blending的区别

https://blog.csdn.net/u014114990/article/details/50819948

https://mlwave.com/kaggle-ensembling-guide/

The basic idea behind stacked generalization is to use a pool of base classifiers, then using another classifier to combine their predictions, with the aim of reducing the generalization error.

Let’s say you want to do 2-fold stacking:

  • Split the train set in 2 parts: train_a and train_b
  • Fit a first-stage model on train_a and create predictions for train_b
  • Fit the same model on train_b and create predictions for train_a
  • Finally fit the model on the entire train set and create predictions for the test set.
  • Now train a second-stage stacker model on the probabilities from the first-stage model(s).

A stacker model gets more information on the problem space by using the first-stage predictions as features, than if it was trained in isolation.

It is usually desirable that the level 0 generalizers are of all “types”, and not just simple variations of one another (e.g., we want surface-fitters, Turing-machine builders, statistical extrapolators, etc., etc.). In this way all possible ways of examining the learning set and trying to extrapolate from it are being exploited. This is part of what is meant by saying that the level 0 generalizers should “span the space”.

[…] stacked generalization is a means of non-linearly combining generalizers to make a new generalizer, to try to optimally integrate what each of the original generalizers has to say about the learning set. The more each generalizer has to say (which isn’t duplicated in what the other generalizer’s have to say), the better the resultant stacked generalization. Wolpert (1992) Stacked Generalization

从以上文字我们可以知道,stacking思想的精髓是,从训练数据的多个不同侧面对数据的分布情况进行了解,从而的全面地学习到数据的分布规律,然后用上一层学习器学习到的多个侧面知识,作为下一层学习的对象进一步学习,其实是为了汇总学习到的信息,从而学习得更好。

分分钟带你杀入Kaggle Top 1%

数据比赛大杀器----模型融合(stacking&blending)

集成学习总结 & Stacking方法详解

stacking涉及到类似交叉验证的步骤,关于交叉验证:

1.理解交叉验证(cross validation,cv):https://blog.csdn.net/liuweiyuxiang/article/details/78489867
交叉验证实际上就是对同一批数据进行多次利用,但每次这批数据的训练集、测试集的划分方式不同,算法在各个数据集划分上都跑一遍,各个结果取平均值来衡量该算法的准确性。
交叉验证的本质是多次实验,然后取平均数作为最终结果。

交叉验证的用途:
1.1可用于算法调参:同一个算法,如KNN算法,为了确定参数K的最佳取值,可以在K=3时,进行交叉验证,得出K=3时的平均准确度,
然后K=4时,交叉验证,得出K=4时的平均准确度,如此类推。
最后比较K取各个值时的平均准确度来确定K取哪个值时准确度最好。

1.2 交叉验证用于比较算法(模型选择):在各个算法的参数已经确定的情况下,(例如KNN的k确定为5,逻辑回归算法的参数也已经确定),让KNN和逻辑回归都在同一个数据集上
做一次交叉验证,得出各自的准确度,即可决定KNN和LR哪个好。

验证集(validation set)与训练集相似,但它不是必须的,做交叉验证的时候才会用到验证集。一般情况下,只需要把整个数据集分为training set(假设有8000行数据)、testing set(假设有2000行),training set用于算法训练,是的算法学习到摸清楚数据集的整体分布规律,然后用训练后的算法对testing set做预测,计算准确率。但这种只分为training set、testing set的做法,容易导致训练得到算法的方差(variance)较大,算法表现不稳定,于是可把testing set保持不动,把原来的training set进一步细分,例如划分成为5份【sub set 1、sub set 2、sub set 3,...sub set 5】每份1600行数据,其中4份作为training set,另一份(sub set 1)作为验证集(validation set),然后让算法在那4份的training set上进行训练学习,然后在validation set上预测结果,得出这种划分下的算法准确性。还可以将sub set 2作为验证集,sub set 1、3、4、5合在一起作为training set,训练之后sub set2上进行预测,计算准确率。如此进行5次,最后把各次的准确率求均值,作为算法的准确性,这个过程称为交叉验证。验证之后,还可以进一步在testing set(2000行)上进行预测,即作为算法准确性。由此我们可以看出validation set作用与原来的testing set其实是一样的。

训练集、验证集、测试集以及交验验证的理解

2.网格搜索:就是调参时穷举搜索,例如参数a有两个取值可选,b有三种取值可选,则一共有6中参数取值组合,逐一试过去,最终找到最佳的参数组合。
https://www.cnblogs.com/ysugyl/p/8711205.html
https://blog.csdn.net/sinat_32547403/article/details/73008127

【书签】stacking、blending的更多相关文章

  1. Dream team: Stacking for combining classifiers梦之队:组合分类器

     sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...

  2. 模型融合——stacking原理与实现

    一般提升模型效果从两个大的方面入手 数据层面:数据增强.特征工程等 模型层面:调参,模型融合 模型融合:通过融合多个不同的模型,可能提升机器学习的性能.这一方法在各种机器学习比赛中广泛应用, 也是在比 ...

  3. Liberty Mutual Property Inspection, Winner's Interview: Qingchen Wang

    Liberty Mutual Property Inspection, Winner's Interview: Qingchen Wang The hugely popular Liberty Mut ...

  4. 【干货】Kaggle 数据挖掘比赛经验分享(mark 专业的数据建模过程)

    简介 Kaggle 于 2010 年创立,专注数据科学,机器学习竞赛的举办,是全球最大的数据科学社区和数据竞赛平台.笔者从 2013 年开始,陆续参加了多场 Kaggle上面举办的比赛,相继获得了 C ...

  5. Kaggle 数据挖掘比赛经验分享(转)

     原作者:陈成龙 简介 Kaggle 于 2010 年创立,专注数据科学,机器学习竞赛的举办,是全球最大的数据科学社区和数据竞赛平台.笔者从 2013 年开始,陆续参加了多场 Kaggle上面举办的比 ...

  6. Kaggle 数据挖掘比赛经验分享

    文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 来源 | 腾讯广告算法大赛 作者 | 陈成龙 Kaggle 于 2010 年创立,专注数据科学,机器学 ...

  7. 深度网络中的Tricks

    数据增强(Data augmentation) 预处理(Pre-processing) 初始化(Initializations) 训练中的Tricks 激活函数(Activation function ...

  8. 谈谈模型融合之一 —— 集成学习与 AdaBoost

    前言 前面的文章中介绍了决策树以及其它一些算法,但是,会发现,有时候使用使用这些算法并不能达到特别好的效果.于是乎就有了集成学习(Ensemble Learning),通过构建多个学习器一起结合来完成 ...

  9. 模型融合之blending和stacking

    1. blending 需要得到各个模型结果集的权重,然后再线性组合. """Kaggle competition: Predicting a Biological Re ...

随机推荐

  1. Centos7增加磁盘空间并挂载目录(VMware)

    1.前言 今天本机vmware在使用docker安装oracle11g时提示nospace空间不足,所以用这篇文章简介下虚拟机如何扩展硬盘并挂载 2.添加新硬盘 依次点击"虚拟机" ...

  2. C# 基础知识系列- 14 IO篇 流的使用

    0. 前言 继续之前的C# IO流,在前几篇小短片中我们大概看了下C# 的基础IO也对文件.目录和路径的操作有了一定的了解.这一篇开始,给大家演示一下流的各种操作.以文件流为例,一起来看看如何操作吧. ...

  3. Linux之进程管理工具supervisor

    环境:CentOS 7官方文档:http://supervisord.org/ 安装 # yum install -y epel-release # yum install -y supervisor ...

  4. Java——Java是什么一门什么语言

    解释型语言 源代码不能直接翻译成机器语言,而是先翻译成中间代码,再由解释器对中间代码进行解释运行: 程序不需要编译,程序在运行时才翻译成机器语言,每执行一次都要翻译一次: 解释性语言代表:Python ...

  5. 数据结构--队列(Java实现)

    数据结构--队列(Java实现) 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 简介 队列是一种特殊的线性表,特殊之处在于它只 ...

  6. spring的aop的注解配置

    一.使用注解的方式配置后置通知 第一步,创建通知类LogAdvice 第二步,要在spring主配置文件中声明以注解的方式配置spring aop  第三步,测试 二.其他异常配置 package c ...

  7. matlab基础知识总结

  8. Qt 操作sql server数据库

    添加qtsql的库 连接数据库 QSqlDatabase_db = QSqlDatabase::addDatabase("QODBC"); _db.setHostName(); _ ...

  9. scala 中 Any、AnyRef、Object、AnyVal 关系

    Any,是 scala 中的抽象类,不能实例化 AnyRef 继承于 Any,它是一个 trait AnyVal 继承于 Any,它是一个抽象类,目的是消除基本类型,scala中只有引用类型,仅此作用 ...

  10. 解决Eclipse添加新server时无法选择Tomcat7.0

    新添加tomcat时 出现如下图情况: 解决方法:这时打开工作空间目录下的.metadata\.plugins\org.eclipse.core.runtime\.settings文件夹,删除org. ...