Stacking

先前学习的集成学习

先前的思路很简单,假设有三个算法,每个算法都对数据进行一个预测,最后综合这三个结果得出一个最终结果,对于分类问题可以进行少数服从多数,对于回归问题可以简单地取平均值

stacking是另一种思路,对于stacking这个方法来说,假设有三个算法,首先求出这三个算法对于这个数据的预测结果,但是不直接使用这三个预测结果进行综合来得到最终结果,将这三个预测结果作为输入,再添加进一层算法,也就是说,以这三个结果作为输入,再训练出一个新的模型,然后用这个新的模型的输出作为最终的结果

这个方法可以解决回归问题也可以解决分类问题,只要三个算法得出的三个模型,其预测的结果是输入数据是某一类的概率就可以了,将这三个模型预测的某一类的概率值作为第四个模型的输入,最后得到一个总的新的样本是某一类的概率,使用这个概率再进行分类

实际上分类问题和回归问题可以以预测这个样本在哪个类别中的概率这个数值作为连接,就可以很轻松的将分类问题转换成回归问题或者是将回归问题转换成分类问题

明白了stacking是什么以后,看一下如何训练出一个stacking的分类器,思路本身是很简单的

要做的事情就是首先将训练数据集分成两份,对于其中的一份,使用这一份数据集训练出三个模型,第二份的意义是训练第四份模型

也就是说,首先使用第一份数据通过三个算法训练出三个模型,训练好以后将第二份数据直接丢进训练好的三个模型中,相应的,训练好的三个模型也就有了输出结果,这些新的输出结果和第二份的数据里相应的真值输出就形成了一个新的数据集,然后用这个新的数据集来训练第四个模型,最终形成stacking的集成训练模型

在了解构成以及思路以后就可以构建出更复杂的模型,使用三层的模型,第一层有三个模型,相应的可以得到三个输出,将这三个输入作为输入可以再分别训练出三个模型作为第二层的模型,这三个模型以第一层的输出作为输入,又可以得到三个输出结果,然后再使用这三个输出作为第三层这一个模型的输入,然后使用第三层模型得到的结果作为整个stacking模型的最终结果

按照上面的思路的话,如果要训练上面的stacking模型的话,就要将训练数据集分成三份,第一份用来训练第一层的三个模型,第二份用来训练第二层的三个模型,第三份就用来训练第三层的一个模型

所以对于stacking来说,层数是一个超参数,每一层的模型数也是一个超参数,因此stacking模型具有很高的复杂性,也正是如此,这个模型是很容易过拟合的

可以发现,stacking这种组建方式是很像神经网络的

最新文章

  1. 为jQuery添加Webkit的触摸方法支持
  2. [bzoj1597][usaco2008 mar]土地购买 (动态规划+斜率优化)
  3. Spark 架构
  4. Objective-C 快速入门--基础(一)
  5. RMQ(ST算法)
  6. 设置ajax 同步执行
  7. Eclipse启动Tomcat访问不了首页
  8. ※C++随笔※=>☆C++基础☆=>※№→C++中 #include<>与#include""
  9. Documentation/sched-bwc.txt 的中文翻译
  10. el和jstl
  11. 变量数据是怎么进ARM中的RAM中?
  12. 关于TCP封包、粘包、半包
  13. Windows上memcached的使用
  14. USB重定向
  15. 【编程开发】PHP---面向对象
  16. Python爬虫入门教程 4-100 美空网未登录图片爬取
  17. MySQL 笔记整理(4) --深入浅出索引(上)
  18. C# 批量删除Word超链接
  19. 【工匠大道】升级Mac下的svn,解决命令行不能使用svn的问题
  20. POJ 1328 Radar Installation【贪心】

热门文章

  1. Linux:Ubuntu配置jdk环境变量
  2. Hadoop0.20.2中MapReduce读取gb2312文件出现乱码问题
  3. macos 安装telnet命令
  4. hdu 1145(Sticks) DFS剪枝
  5. 《TCP/IP详解 卷1:协议》第4章 ARP:地址解析协议
  6. 《PHP安全编程系列》系列分享专栏
  7. 经典论文系列 | 目标检测--CornerNet & 又名 anchor boxes的缺陷
  8. B 站崩了,总结下「高可用」和「异地多活」
  9. WPF教程二:理解WPF的布局系统和常用的Panel布局
  10. 使用crt连接linux慢