详解stacking过程

翻到之前自己写的这篇博客,感觉写的还是不够简洁明了,特地回来改一下,顺便文末附上Kaggle内相关操作的代码,希望能够帮助学习的同学能够瞬间理解stacking这个概念。stacking:stacking是一种分层模型集成框架。以两层为例,第一层由多个基学习器组成,其输入为原始训练集,第二层的模型则是以第一层基学习器的输出作为特征加入训练集进行再训练,从而得到完整的stacking模型。sta…

大家好,又见面了,我是你们的朋友全栈君。

翻到之前自己写的这篇博客,感觉写的还是不够简洁明了,特地回来改一下,顺便文末附上Kaggle内相关操作的代码,希望能够帮助学习的同学能够瞬间理解stacking这个概念。

stacking:stacking是一种分层模型集成框架。以两层为例,第一层由多个基学习器组成,其输入为原始训练集,第二层的模型则是以第一层基学习器的输出作为特征加入训练集进行再训练,从而得到完整的stacking模型。stacking的方法在各大数据挖掘比赛上都很风靡,模型融合之后能够小幅度的提高模型的预测准确度。

stacking详解:

借用拍拍贷风控比赛几位大神这张模型融合的例子,来讲解一下。其中的第三模块,预测M3数据就是一个stacking的过程。

 

详解stacking过程

  • 第一层:我们采用RF、ET、GBDT、XGB四种模型,分别对训练样本进行预测,然后将预测结果作为下一层的训练样本。

具体训练过程:

  1. 划分training data为K折,为各个模型的训练打下基础;
  2. 针对各个模型RF、ET、GBDT、XGB,分别进行K次训练,每次训练保留K分之一的样本用作训练时的检验,训练完成后对testing data进行预测,一个模型会对应5个预测结果,将这5个结果取平均;
  3. 最后分别得到四个模型运行5次之后的平均值,同时拼接每一系列模型对训练数据集的预测结果带入下一层;

图解:

详解stacking过程

举例:比如针对第一个模型RF,我们先将数据集划分成5折,1,2,3,4,5。步骤如下:

  1. 保留2,3,4,5训练,用1做测试数据(查看当前训练的效果,可配合early stop)记录下该折测试数据的预测结果,同时预测testing data(此处的testing data就是我们要最终提交结果的那部分数据);
  2. 保留1,3,4,5训练,用2做测试数据并记录下该折测试数据的预测结果,预测testing data;
  3. 保留1,2,4,5训练,用3做测试数据并记录下该折测试数据的预测结果,预测testing data;
  4. 保留1,2,3,5训练,用4做测试数据并记录下该折测试数据的预测结果,预测testing data;
  5. 保留1,2,3,4训练,用5做测试数据并记录下该折测试数据的预测结果,预测testing data;
  6. 训练五轮之后得到针对testing data的五个预测值,取平均值,同时拼接每一系列模型对训练数据集的预测结果;

接下来再用同样的方法训练ET、GBDT、XGB,注意保持K折数据的一致!全部训练完成之后,将得到的四个预测结果带入下一层预测。

  • 第二层:将上一层的四个结果带入新的模型,进行训练再预测。第二层的模型一般为了防止过拟合会采用简单的模型。

具体训练过程:将四个预测结果,拼接上各个样本的真实label,带入模型进行训练,最终再预测得到的结果就是stacking融合之后的最终预测结果了。

以上即为stacking的完整步骤!

Blending大体与stacking类似,只是将Kfold CV改为了 HoldOut CV,也就是原来Kfold CV是等距划分训练集,HoldOut CV根据自己定义的百分比进行训练集测试集的划分。

为方便理解,附上Kaggle stacking代码:https://www.kaggle.com/arthurtok/introduction-to-ensembling-stacking-in-python

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/125717.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • sscanf的用法「建议收藏」

    sscanf的用法「建议收藏」sscanf的作用:从一个字符串中读进于指定格式相符的数据。利用它可以从字符串中取出整数、浮点数和字符串。sscanf和scanf的区别:scanf是以键盘作为输入源,sscanf是以字符串作为输入源。sscanf:原型:intsscanf(constchar*str,constchar*format,……);说明:sscanf()会将参数str的…

    2025年8月12日
    2
  • docker 实战—部署tomcat\weblogic集群 (二)

    docker 实战—部署tomcat\weblogic集群 (二)

    2022年2月2日
    48
  • Android preference_安卓fragment切换

    Android preference_安卓fragment切换PreferenceFragmentAndroid应用程序通常要提供首选项,以允许用户定制应用程序。例如,可以允许用户保存那些用于访问Web资源的登录凭据,等等。在Android中,可以使用PreferenceActivity基类为用户显示一个用于编辑首选项的活动。在Android3.0和更高版本中,可以使用PreferenceFragment类实现相同的功能。//XML//新建(res…

    2025年9月28日
    3
  • Spring 从零開始-05[通俗易懂]

    Spring 从零開始-05

    2022年1月25日
    35
  • 禁爬虫robots.txt文件[通俗易懂]

    禁爬虫robots.txt文件[通俗易懂]禁止所有爬虫修改根目录robots.txt文件删除所有添加:User-agent:*Disallow:/检测地址:https://tools.aizhan.com/robots/www.lilysilk.org/

    2022年5月18日
    53
  • Oracle number数据类型的使用[通俗易懂]

    Oracle number数据类型的使用[通俗易懂]需要首先明白有效位的含义:从左到右,从第一个不为零的数开始计数第一种情况:number后面都是两个正数,第一个数表示有效位,第二个数表示小数点后的位数(也就是精确度,需要进行四舍五入)例如number(2,1)存入的数据有1,0.1,1.666分析过程:存入1:要求有效位小于等于2,所以自动补充0,存入1实际上判断的是1.0是否符合条件,自然可以添加存入0….

    2022年7月24日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号