stacking算法作为kaggle上常用的一种算法,个人在网上查看了很多博客,都没有彻底明白,最近在知乎上找到了一篇讲解很清楚的stacking算法。

https://zhuanlan.zhihu.com/p/25836678

原文中有一幅图极具误导性,本文找到的最后一幅图为正确的图。

下面内容同上面链接,主要为防止今后链接失效。在此感谢大神讲解

个人理解:
stacking有点集成思想,以回归为例,对于每个基学习器,我们在集成时采用的时加权平均,根据模型的f1值等确定每个模型的权重后,就可以直接加权平均,但是这个权重选择一定是最优的吗?不一定吧
假设 y = Ax1 + Bx2 + C* x3,加权得到的A=0.3,B=0.2,C=0.5。可以采用网格化搜索,假设A=(0,1),B=(0,1),C=1-A-B,给定步长step=0.05,就可以网格化最优的A、B、C,但是网格化出来的参数毕竟有限,
有可能最优值是A=0.41,B=0.26,C=0.33,如果stacking第二层采用LR,则会拟合出最佳的A、B、C

我理解的Kaggle比赛中提高成绩主要有3个地方

特征工程
调参
模型融合

之前每次打比赛都只做了前两部分,最后的模型融合就是简单的加权平均,对于进阶的Stacking方法一直没尝试,这几天摸索了一下还是把Stacking方法给弄懂了。(本文重点讲解Stacking,Bagging和Boosting有很多权威的好教程,所以不详细介绍)最早的Stacking思想早些年就有论文发表,但是应用Stacking方法到比赛中的相关文章还是少之甚少,这有两篇https://mlwave.com/kaggle-ensembling-guide/、HUMAN ENSEMBLE LEARNING讲的很棒,但是之前因为理解不到位,有几处卡住了。在@Wille 的文章如何在 Kaggle 首战中进入前 10%中Stacking只是作为一部分提到。因此决定自己写一篇关于模型融合的文章。本文不涉及到各个算法原理层次的深度,目的在于从宏观上帮助理解这几个模型融合方法。
一、Voting
模型融合其实也没有想象的那么高大上,从最简单的Voting说起,这也可以说是一种模型融合。假设对于一个二分类问题,有3个基础模型,那么就采取投票制的方法,投票多者确定为最终的分类。

二、Averaging
对于回归问题,一个简单直接的思路是取平均。稍稍改进的方法是进行加权平均。权值可以用排序的方法确定,举个例子,比如A、B、C三种基本模型,模型效果进行排名,假设排名分别是1,2,3,那么给这三个模型赋予的权值分别是3/6、2/6、1/6
这两种方法看似简单,其实后面的高级算法也可以说是基于此而产生的,Bagging或者Boosting都是一种把许多弱分类器这样融合成强分类器的思想。

三、Bagging
Bagging就是采用有放回的方式进行抽样,用抽样的样本建立子模型,对子模型进行训练,这个过程重复多次,最后进行融合。大概分为这样两步:

重复K次有放回地重复抽样建模训练子模型

2.模型融合

分类问题:voting
回归问题:average

Bagging算法不用我们自己实现,随机森林就是基于Bagging算法的一个典型例子,采用的基分类器是决策树。R和python都集成好了,直接调用。

四、Boosting
Bagging算法可以并行处理,而Boosting的思想是一种迭代的方法,每一次训练的时候都更加关心分类错误的样例,给这些分类错误的样例增加更大的权重,下一次迭代的目标就是能够更容易辨别出上一轮分类错误的样例。最终将这些弱分类器进行加权相加。引用加州大学欧文分校Alex Ihler教授的两页PPT

同样地,基于Boosting思想的有AdaBoost、GBDT等,在R和python也都是集成好了直接调用。
PS:理解了这两点,面试的时候关于Bagging、Boosting的区别就可以说上来一些,问Randomfroest和AdaBoost的区别也可以从这方面入手回答。也算是留一个小问题,随机森林、Adaboost、GBDT、XGBoost的区别是什么?

五、Stacking
Stacking方法其实弄懂之后应该是比Boosting要简单的,毕竟小几十行代码可以写出一个Stacking算法。我先从一种“错误”但是容易懂的Stacking方法讲起。
Stacking模型本质上是一种分层的结构,这里简单起见,只分析二级Stacking.假设我们有3个基模型M1、M2、M3。
对于测试集T1的得到,有两种方法。注意到刚刚是2折交叉验证,M1相当于训练了2次,所以一种方法是每一次训练M1,可以直接对整个test进行预测,这样2折交叉验证后测试集相当于预测了2次,然后对这两列求平均得到T1。
或者直接对测试集只用M1预测一次直接得到T1。
P1、T1得到之后,P2、T2、P3、T3也就是同样的方法。理解了2折交叉验证,对于K折的情况也就理解也就非常顺利了。所以最终的代码是两层循环,第一层循环控制基模型的数目,每一个基模型要这样去得到P1,T1,第二层循环控制的是交叉验证的次数K,对每一个基模型,会训练K次最后拼接得到P1,取平均得到T1,
该图是一个基模型得到P1和T1的过程,采用的是5折交叉验证,所以循环了5次,拼接得到P1,测试集预测了5次,取平均得到T1。而这仅仅只是第二层输入的一列/一个特征,并不是整个训练集。*

Stacking注意事项
做Stacking模型融合时需要注意以下个点,我们拿2层stacking模型融合来举例子:

  • 第一层的基模型最好是强模型,而第二层的基模型可以放一个简单的分类器,防止过拟合。
  • 第一层基模型的个数不能太小,因为一层模型个数等于第二层分类器的特征维度。大家可以把勉强将其想象成神经网络的第一层神经元的个数,当然这个值也不是越多越好。
  • 第一层的基模型必须准而不同",如果有一个性能很差的模型出现在第一层,将会严重影响整个模型融合的效果

Stacking算法讲解相关推荐

  1. 边界填充算法讲解_边界填充算法

    边界填充算法讲解 Boundary fill is the algorithm used frequently in computer graphics to fill a desired color ...

  2. 干货回顾丨机器学习笔记-----AP(affinity propagat)算法讲解及matlab实现

    在统计和数据挖掘中,亲和传播(AP)是基于数据点之间"消息传递"概念的聚类算法.与诸如k-means或k-medoids的聚类算法不同,亲和传播不需要在运行算法之前确定或估计聚类的 ...

  3. Learning to Rank 中Listwise关于ListNet算法讲解及实现

     [学习排序] Learning to Rank 中Listwise关于ListNet算法讲解及实现             版权声明:本文为博主原创文章,转载请注明CSDN博客源地址!共同学习, ...

  4. TF-IDF算法讲解

    什么是 TF-IDF 算法? TF(全称TermFrequency),中文含义词频,简单理解就是关键词出现在网页当中的频次. IDF(全称InverseDocumentFrequency),中文含义逆 ...

  5. Java的算法讲解以及案例!

    算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,java算法就是采用Java语言来实现解决某一问题的清晰指令. 算法的特征: 输入性:有零个或多个外部量作为算法的输入 输出性:算法产生 ...

  6. 单目标多目标 灰狼算法算法讲解

    灰狼算法单目标&多目标算法讲解 引言 元启发式算法 概念 优势 特征 分类 1. 灰狼算法思想 参考文献 源代码下载 灰狼社会等级及捕猎过程 2. 单目标灰狼算法 包围猎物 追逐猎物 搜捕猎物 ...

  7. Maigo的KM算法讲解

    Maigo的KM算法讲解 KM算法是通过给每个顶点一个标号(叫做顶标)来把求最大权匹配的问题转化为求完备匹配的问题的.设顶点Xi的顶标为A[i],顶点Yi的顶标为B[i],顶点Xi与Yj之间的边权为w ...

  8. BF、KMP、BM、Sunday算法讲解

    原文地址: https://www.cnblogs.com/Syhawk/p/4077295.html BF.KMP.BM.Sunday算法讲解 字串的定位操作通常称作串的模式匹配,是各种串处理系统中 ...

  9. [转]全网最!详!细!tarjan算法讲解

    转发地址:https://blog.csdn.net/qq_34374664/article/details/77488976 原版的地址好像挂了..... 看到别人总结的很好,自己就偷个懒吧..以下 ...

最新文章

  1. SQLServer 系统表
  2. Android:AS与Unity3D之间打包的各种坑及解决方案
  3. 邓白氏码查询不能用_SQL多表查询
  4. 检测线程是否存活代码!
  5. win7 64+python2.7.12安装numpy+scipy+matplotlib+scikit-learn
  6. Office Communication Server(OCS) 2007存档和CDR的部署
  7. idea git里的用户怎么修改
  8. jzoj3509-倒霉的小C【gcd,欧拉函数】
  9. 有关正则表达式的一些用法总结
  10. 拼多多回应“鼓励刷单”:文章描述有歧义 已删除
  11. 现代软件工程第一次结对编程(黄金点游戏)总结
  12. 用glew,glfw实现opengl绘制3D学习笔记1-实现一个窗口
  13. NGUI的输入框制作(attach- input filed script的使用)
  14. 温度转换问题——从C到Python
  15. 【C++沉思录】代理类
  16. 普通计算机用的是什么屏幕,笔记本屏幕的色域 72%NTSC和100%sRGB有什么区别
  17. 计算机函数说课ppt,信息技术应用 用计算机画函数图象ppt专用说课稿内容
  18. PCB的IPC标准是什么
  19. tp6 阿里云短信接口 php
  20. php使用iframe框架,ThinkPHP后台首页使用iframe(框架)

热门文章

  1. qq for ubuntu 10.04总是掉线
  2. ubuntu 配置网络重启 使用/etc/init.d/networking restart 命令无效
  3. 【Android SurfaceView】视频播放器 简单例子
  4. Linux 正则表达式
  5. vuejs中组件的两种不同的编写风格-选项式API及组合式API
  6. deb包的解压与重打
  7. Android绘制竖直虚线完美解决方案—自定义View
  8. 8.18 纪中集训 Day18
  9. 多业务线下,IT企业如何应对市场经济下行危机?
  10. linux系统查询二进制BIn文件方法