stacking模型融合_【干货】比赛后期大招之stacking技术分享

各位同学大家好,我是本次参赛选手李博,比赛ID是深蓝(DeePBluE)。现在就读于北京邮电大学,是一名研一的在校生,研究方向是数据分析和机器学习。
是的,我又来分(na)享(li)东(wu)西了!这次给大家分享的是stacking的一些基本知识,希望对大家有帮助。
现在比赛进入了白热化阶段,并且马上要切换决赛B榜了,很多队伍都开始想着融合模型进行提高,大家讨论最多的一个就是stacking框架,但是在群里看到好多好多同学还没有搞明白stacking框架到底是什么结构?要怎么运行?有什么注意点?有没有变种?等等一些列问题。在哆啦的提醒下,今天写这篇文章就按我自己的理解普及下stacking的一些知识(如果有不对的地方欢迎大家指正~~)。

一、前言

首先,在我看来stacking严格来说不能称为一种算法,我理解的是一种非常精美而复杂的对模型的集成策略。大家都知道,在给定了数据集的情况下,数据内部的空间结构和数据之间的关系是非常复杂的。而不同的模型,其实很重要的一点就是在不同的角度去观测我们的数据集。我举个例子,KNN可能更加关注样本点之间的距离关系(包括欧几里得距离(Euclidean Distance)、明可夫斯基距离(Minkowski Distance等等),当样本距离相对较近,KNN就把他们分为一类;而决策树,可能更加关注分裂节点时候的不纯度变化,有点像我们自己找的规则,在满足某个条件且满足某个条件的情况下,决策树把样本分为一类等等。也就是说,不同的算法模型,其实是在不同的数据空间角度和数据结构角度来观测数据,然后再依据它自己的观测,结合自己的算法原理,来建立一个模型,在新的数据集上再进行预测。这样大家就会有个疑问了,俗话说:三人行必有我师。既然是不同的算法对数据有不同的观测,那么我们能不能相互取长补短,我看看你的观测角度,你看看我的观测角度,咱俩结合一下,是不是可以得到一个更加全面更加优秀的结果呢?答案是肯定的。在我当初学基础算法的时候就有这么一个疑问,但是不知道怎么结合,直到有一天看到了stacking的框架,瞬间感觉找到了一片新天地~~~~下面我从以下几个方面介绍stacking。

二、stacking的框架结构与运行过程

刚开始看stacking好像是交叉检验的既视感,其实并不是这样。假设是五折的stacking,我们有一个train数据集和一个test数据集,那么一个基本的stacking框架会进行如下几个操作:
1、选择基模型。我们可以有xgboost,lightGBM,RandomForest,SVM,ANN,KNN,LR等等你能想到的各种基本算法模型。
2、把训练集分为不交叉的五份。我们标记为train1到train5。
3、从train1开始作为预测集,使用train2到train5建模,然后预测train1,并保留结果;
然后,以train2作为预测集,使用train1,train3到train5建模,预测train2,并保留结果;如此进行下去,直到把train1到train5各预测一遍;
4、把预测的结果按照train1到trian5的位置对应填补上,得到对train整个数据集在第一个基模型的一个stacking转换。
5、在上述建立的五个模型过程中,每个模型分别对test数据集进行预测,并最终保留这五列结果,然后对这五列取平均,作为第一个基模型对test数据的一个stacking转换。
6、选择第二个基模型,重复以上2-5操作,再次得到train整个数据集在第二个基模型的一个stacking转换。
7、以此类推。有几个基模型,就会对整个train数据集生成几列新的特征表达。同样,也会对test有几列新的特征表达。8、一般使用LR作为第二层的模型进行建模预测。
大家看到这里可能有些不清楚,下面我画个图直观解释一下:

68b827c07a5cf80026338e7ed3c42980.png
图1 stacking的框架及预测

上面这个框架说明的是:对训练数据进行无重复的五次划分之后,分别对其中每一部分进行一次预测,而预测的模型就是由其余四部分训练的;并且在预测了预测集之后,还需要对我们的test数据集也进行一次预测,这这样就会得到5个N/5行、1列的对train数据集的特征转换,和5个M行、1列的对test数据集的特征转换,由此进入下一个图。

0ee7e03ad5e3f221f9a6aef792d0133a.png
图2 stacking的框架及预测图

这个图说明的是对五部分的train分别预测之后再组成对train的新的表达,由5个5/N行一列的预测组成一个N行1列预测结果,从而得到对train的新表达;同时,对test的结果也进行处理,由于是5个模型对test的预测,所以要取平均,使得五列平均为一列,从而得到对test的新表达。
至此,整个stacking的框架和运作流程介绍完毕,希望大家通过上面这一部分,能对stacking的整个框架和运作流程有个比较清晰的认识。

三、使用stacking的一些注意事项

经过上一部分的介绍,想必大家感觉到stacking的威力可能很大,事实上也是这样的。但是仍然有一些需要注意的地方,简单介绍几点:
1、stacking的框架设计比较复杂,对于一个基模型要训练5次,如果你的一个xgb模型要训练2个小时,即使在进行stacking的时候每折减少了五分之一的数据量,你的计算时间仍然是很可观的,加起来应该还是8-9小时,所以耗费时间很长(想像一下一个stacking框架跑一个基模型要大半天,简直太可怕)。所以建议大家在使用的时候要计算时间的耗费,或者可以改为3折,4折等等;
2、我们前面讲过了,stacking框架是集成了不同的算法,充分利用不同算法从不同的数据空间角度和数据结构角度的对数据的不同观测,来取长补短,优化结果。所以,我们的基模型除了是不同参数的相同模型之外,比如不同参数的xgboost,或者不同K值的KNN等等;更重要的是要尽可能的多加一些不同种类的基模型进去,也就是说所谓的模型要“跨越空间”的概念。这样的话我们的集成结果会更加稳健,更加精确。(我曾经见过一个比赛集成了上百个基模型的stacking框架获奖,当然用在我们这次比赛中好像不大合适O(∩_∩)O哈哈~)

四、stacking的一些基本变种改进

在变种改进方面,我们可以不仅对模型进行融合,还可以对特征级进行一些变化,比如选部分特征做stacking;或者对stacking的结果进行再次的stacking,我们上面介绍的是两层的stacking,可以有3层,或者更多。但是时间复杂度很高,效果并不一定明显。好了,不知不觉洋洋洒洒写了两千多个字(自己画的两个图有点丑不要介意),希望这篇文章能对大家理解stacking和应用stacking有所帮助,并且实实在在的提高比赛得分~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/507557.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多stream_基础之Lambda和Stream的邂逅

基础之Lambda和Stream的邂逅show me the code and take to me,做的出来更要说的明白GitHub项目JavaHouse同步收录喜欢就点个赞呗! 你的支持是我分享的动力!引入是否有遇到看不懂身边同事代码的情况,是否有被面试官问到 Java 新特性不懂的情况。我掐指一算…

注意力机制--转载自我的学生隆兴写的博客

原文链接为:https://a-egoist.com/posts/a44b8419/,学生自己搭建的博客,点赞! 1 Attention 1.1 什么是 Attention 灵长类动物的视觉系统中的视神经接受了大量的感官输入。在检查视觉场景时,我们的视觉神经系统大约每…

python正弦波和等腰三角波_正弦波脉宽调制(SPWM)原理

1、QPWM的概念 在进行脉宽调制时,使脉冲系列的占空比按正弦规律来安排。当正弦值为最大值时,脉冲的宽度也最大,而脉冲间的间隔则最小,反之,当正弦值较小时,脉冲的宽度也小,而脉冲间的间隔则较大…

推荐系统--矩阵分解(1)

推荐系统–矩阵分解(1) 推荐系统–矩阵分解(2) 推荐系统–矩阵分解(3) 推荐系统–矩阵分解(4) 推荐系统–矩阵分解(5) 推荐系统–矩阵分解(6) 1 引入 一个矩阵可以分解为两个小矩阵的乘积,以音乐为例,利用潜在特征向量来给用户和音乐打上标签&#xff…

python dag调度系统开发_基于机器学习的DAG调度平台

什么是DAG?有向无环图树形结构:除根节点,每个节点有且仅有一个上级节点,下级节点不限。根节点没有上级节点。图结构:每个节点上级、下级节点数不限。DAG调度平台的定义及场景任务调度是在各行各业是个基础问题,当任务…

轻量级人脸识别算法

1 概述 轻量级人脸识别算法

python元组与列表的区别、简答题_细解python面试题(一)元组和列表的区别

可能略去了一些内容。1、列表VS元组在python编程中,我们经常搞不懂列表和元组的区别,或者哪些函数可以用于列表,哪些用于元组,那么跟随本文我们来深入的探索。2、元组元组是值的集合,我们用圆括号来申明它。元组中的类…

Yolo家族算法分析

1 历史简介 2 YOLO算法思想 YOLO算法的基本思想: (1)将图片划分为SSS \times SSS个网格; (2)计算每个边界框和置信度; (3)计算每个网格属于某个类别的概率; &…

u8 附件上传后存放路径_织梦DedeCms附件按月份保存的修改方法

正常情况下,dedecms织梦系统的图片附件是按日保存的,一天一个文件夹, 时间长了, 这样在allimg中就会生成很多文件夹, 不方便管理.虽然,dedecms织梦的后台设置有”附件保存形式”的先项, 但功能太弱,如果是在后台上传和…

推荐系统--矩阵分解(2)

推荐系统–矩阵分解(1) 推荐系统–矩阵分解(2) 推荐系统–矩阵分解(3) 推荐系统–矩阵分解(4) 推荐系统–矩阵分解(5) 推荐系统–矩阵分解(6) 3 BiasSVD:考虑偏置 有一些用户会给出偏高的评分,有一些物品也会收到偏高的评分,比如电影观众为…

tga文件怎么打开_教你win10系统怎么打开stp文件

stp文件怎么打开呢?近来有很多小伙伴反映有朋友发送了一个stp文件给它,搞了半天也没能打开。其实打开stp文件很简单,不过前提是需要有绘图软件。我给大家整理了打开stp文件的图文教程,赶紧来瞧瞧吧有些朋友在使用win10系统的过程中…

python爬取电子病历_一种基于中文电子病历的实体识别方法技术

本发明专利技术提供了一种基于中文电子病历的实体识别方法,涉及医疗实体识别技术领域。针对目前国内缺少公开中文电子病历标注语料库的缺陷,本发明专利技术通过构建整理医学词典,提出了一种半自动语料库标注方法,节省了人工标注的…

推荐系统--矩阵分解(4)

推荐系统–矩阵分解(1) 推荐系统–矩阵分解(2) 推荐系统–矩阵分解(3) 推荐系统–矩阵分解(4) 推荐系统–矩阵分解(5) 推荐系统–矩阵分解(6) 7 基于情感分析的矩阵分解 7.1 引入 【摘要】推荐系统旨在基于丰富的信息预测用户的偏好,例如用户评分、人口统计和评论…

yarn 卸载包_0609-6.1.0-如何卸载CDH6.1

1.文档编写目的Fayson在两年前的文章中介绍过CDH的卸载,参考《如何卸载CDH(附一键卸载github源码)》。除非你是使用Cloudera官方提供的一键安装脚本安装的CDH,否则并没有现成的一键卸载的脚本供使用。为了更好的理解CDH的卸载,这里再次简单介…

推荐系统--矩阵分解(3)

推荐系统–矩阵分解(1) 推荐系统–矩阵分解(2) 推荐系统–矩阵分解(3) 推荐系统–矩阵分解(4) 推荐系统–矩阵分解(5) 推荐系统–矩阵分解(6) 5 TimeSVD:增加时间因素 物品的受欢迎度随着时间而改变,例如,电影可以因外部事件(如新电影中演员…

python安装不了是什么问题_安装不上python的模块怎么办?别怕,我这有妙招!

之前我们介绍过如何在Python中安装第三方的包:Python以第三方包丰富而著称,你想要的功能几乎都可以通过pip命令安装,避免什么都要自己重新造轮子尬尴。但是pip安装有两个常见问题,第一是下载慢,第二是无法安装。慢的原…

推荐系统--矩阵分解(5)

推荐系统–矩阵分解(1) 推荐系统–矩阵分解(2) 推荐系统–矩阵分解(3) 推荐系统–矩阵分解(4) 推荐系统–矩阵分解(5) 推荐系统–矩阵分解(6) 8 基于隐式反馈的矩阵分解 8.1 引入 相对于显示反馈的评分数据,隐式反馈有以下几方面的特征: 只有正反馈&…

xss跨站脚本攻击_网络安全xss跨站脚本攻击原理

以下在未经授权的网站操作均为违法行为XSS跨站脚本攻击xss的危害网络钓鱼,盗取各类账号密码我们先来看一下下面的案例:先来记住一下下面中的表我们来做一个转发上面页面显示已经登录,但是突然页面中提醒再此登录此时,我们并没有多…

推荐系统--联邦学习下的矩阵分解(6)

推荐系统–矩阵分解(1) 推荐系统–矩阵分解(2) 推荐系统–矩阵分解(3) 推荐系统–矩阵分解(4) 推荐系统–矩阵分解(5) 推荐系统–矩阵分解(6) 9 应用于联邦学习的矩阵分解 这个部分主要参考以下两篇论文: 2008-Collaborative Filtering for Implicit Feedback Dat…

python类的特殊方法汇总_Python笔记001-类的特殊方法

Python笔记001-类的特殊方法以下是我学习《流畅的Python》后的个人笔记,现在拿出来和大家共享,希望能帮到各位Python学习者。首次发表于: 微信公众号:科技老丁哥,ID: TechDing,敬请关注。本篇主要知识点:类…