各位同学大家好,我是本次参赛选手李博,比赛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作为第二层的模型进行建模预测。

大家看到这里可能有些不清楚,下面我画个图直观解释一下:

图1 stacking的框架及预测

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

图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有所帮助,并且实实在在的提高比赛得分~

【干货】比赛后期大招之stacking技术分享相关推荐

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

    各位同学大家好,我是本次参赛选手李博,比赛ID是深蓝(DeePBluE).现在就读于北京邮电大学,是一名研一的在校生,研究方向是数据分析和机器学习. 是的,我又来分(na)享(li)东(wu)西了!这 ...

  2. AAAI 2021 | 幻灯片中文字的重要性预测赛亚军DeepBlueAI团队技术分享

    ©PaperWeekly 原创 · 作者|罗志鹏 单位|深兰北京AI研发中心 2 月 2-9 日,AAAI 2021 于线上隆重召开.AAAI(美国人工智能协会)作为人工智能领域的主要学术组织之一,其 ...

  3. UWA 技术分享连载 转载

    技术分享连载1 Q1:Texture占用内存总是双倍,这个是我们自己的问题,还是Unity引擎的机制? Q2:我现在发现两个因素直接影响Overhead,一个是Shader的复杂度,一个是空Updat ...

  4. 知乎技术分享:从单机到2000万QPS并发的Redis高性能缓存实践之路

    本文来自知乎官方技术团队的"知乎技术专栏",感谢原作者陈鹏的无私分享. 1.引言 知乎存储平台团队基于开源Redis 组件打造的知乎 Redis 平台,经过不断的研发迭代,目前已经 ...

  5. UI培训技术分享:设计大神都在用的10种技法!

    越来越多的人开始学习UI设计,想要进群到UI设计这个行业,本期小编为大家介绍的UI培训教程就是关于设计师会经常用到的一些技巧,帮助大家后期的工作中的应用. UI培训技术分享:设计大神都在用的10种技法 ...

  6. 对称加密算法_技术分享丨这是一篇简单的小科普——什么是对称加密算法?(下)...

    大家好~我是贾正经,又到了干货满满的技术分享趴啦~ 上期我们讲解了对称加密算法的小知识,并介绍了国密算法中SM4算法的原理.(上集回顾) 本期带大家了解一下分组密码的五个模式. 分组密码的模式 首先了 ...

  7. python入门教程2word-入门干货:Python操作Word文件经验分享

    原标题:入门干货:Python操作Word文件经验分享 导读:Microsoft Word在当前使用中是占有巨大优势的文字处理器,这使得Word专用的档案格式Word 文件(.docx)成为事实上最通 ...

  8. (2021年)IT技术分享社区个人文章汇总(数据库篇)

    时间过的真快,2021年快要结束了,IT技术分享社区公众号,小编坚持每天给大家分享IT技术相关的文章,希望小编分享的文章能够给大家在日常的工作当中,带来一点帮助,也感谢大家对本公众号的支持,未来我会坚 ...

  9. 技术分享 | 混合云模式下SaaS端前端最佳实践

    导读:集成开放平台采用的是混合云部署架构,包含两个大的组件,管理控制台和引擎.管理控制台是SaaS的,部署在公有云,按租户隔离.引擎部署在客户私有云.一套SaaS版的管理控制台如何适配不同客户的引擎, ...

最新文章

  1. 深度学习可解释性问题如何解决?图灵奖得主Bengio有一个解
  2. LeetCode - Add Binary
  3. 监控——《微服务设计》读书笔记
  4. bootstrap 日历中文_bootstrap日期选择器本地化-中文
  5. 计算机考试设计会议邀请函,计算机二级常见考点之使用合并技术制作邀请函
  6. devops定义_在层中定义DevOps
  7. PHP GUID和UUID生成类
  8. ubuntu 终端透明
  9. China Pub 高清书籍6CD 包含的图书目录
  10. 在Win2003下安装WMP10有奇招
  11. 365天深度学习训练营-第P5周:运动鞋识别
  12. 算法题 金银铜奖牌排序
  13. Android分包MultiDex原理详解
  14. enable 华为交换机ntdp_华为交换机设置
  15. 李笑来发出灵魂感叹背后:区块链投资机构正修炼“龟息大法”
  16. RFID无线射频识别技术基本介绍
  17. oracle表数据如何导出成dbf,怎么将EXCEL导成DBF?《dbf导出excel数据》
  18. IT工作 行业与岗位分析
  19. php如何调用mysql接口_php5 调用api接口
  20. vuex中更新对象或数组的值页面不更新的问题

热门文章

  1. 暑假周进度总结报告4
  2. 指针系统学习5-对使用字符指针变量和字符数组的讨论
  3. P4113 [HEOI2012]采花
  4. centos安装配置tftp服务器
  5. laravel框架常用目录路径
  6. PKU 3013 Big Christmas Tree 最短路 spfa
  7. 《oracle每日一练》oralce数据库的导入导出
  8. 16种oracle查询日期语句
  9. JZOJ 3425. 能量获取
  10. 20 ide配置快捷键补全提示 win