热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

什么是模型融合,stacking集成模型原理介绍

模型融合(集成)参考博客:KaggleEnsemblingGuide(https_mlwave.com模型集成是融合多个训练好的模型,基于某种方式实现测试数据的多模型融合,这


模型融合(集成)参考博客: kaggleensemblingguide (https _ ml wave.com) )。


模型集成是指将训练好的多个模型融合在一起,通过某种方法实现测试数据的多模型融合,可以“补长补短”最终结果,融合各模型的学习能力,提高最终模型的泛化能力。 模型集成方法主要应用于几种模型差异大、相关性小。


常用的model ensemble方法为投票(voting), 平均(averaging), 堆叠(Stacking),非交叉堆叠(Blending),其中投票法和平均法综合结果,stacking和blending融合模型。


目录


1 .投票法2 .加权投票3 .平均法4 .分级5.Stacking6.Blending 1.投票法三种模型相关性较大时:


模型1:111111100=80 %的精度


模型2:111111100=80 %的精度


模型3:101111100=70 %的精度


第1列111,投票1; 第2列110,屏幕为1; 第3列111的投票是1……


最终的3个模型融合投票后,1111111100=80%,最终的准去除率保持在80%,没有提高。


如果三个模型之间的相关性很小,则:


模型1:111111100=80 %的精度


模型2:011101101=70 %的精度


模型3:1000101111=60 %的精度


第1列101,投票1; 第2列110,屏幕为1; 第3列110,投票为1 ……


最终三个模型融合并投票后,1111111101=90%,精度有所提高。


投票法在多分类任务等大预测时有意义。


2 .加权投票融合多数表决的融合方式隐含地意识到所有模型的重要程度相同,但通常我们需要更加重视表现良好的模型,赋予更大的权重。 在加权投票的情况下,表现不好的模型只能通过得到与其他模型相同的结果来增强自己的说服力。


modelpublicaccuracyscoregradientboostingmachine 0.65057 randomforestgini 0.75107 randomforestentropy 0.75222 extratreeeeeeeesentropy 0.7555555 votingensemble(democracy ) 0.75337votingensemble )3*bestvs.rest ) http://www.Sina.com/(com )


3 .平均结果,但是平均了结果,可以在一定程度上减轻过拟合现象。 可以认为是减轻过拟合的一种方法。


通过随机权重初始化5个探测器,并以平均值组合它们的预测,得到的结果也将提高。


modelpublicaucscoreperceptron 0.95288 random perceptron 0.95092 random perceptron 0.95128 random perceptron 0.95118 random perceptron 0.95005000 并不是所有的预测都经过了完美的校正。 预测低概率或高概率可能会导致自信过度或自信不足。 或者被预测在一定范围内很混乱。


即使融合以下4个模型并将结果平均化,精度也可能不会提高。


因为id prediction 10.5720.0430.9640.99,所以我们采用了将预测转换为等级并对等级进行平均的等级平均方法。


Id、Rank、prediction1、1、0.350000562、0、0.350000023、2、0.350000984、3、0.35000111归一化等级


Id、prediction1、0.332、0.03、0.664、1.0采用多个Vowpal Wabbit模型和一个GLMNet模型进行融合,比较了均值和等级均值两种方法。


modelpublicprivatevowpalwabbita0. 607640.59962 vowpalwabbitb0. 607370.59957 vowpalwabbitc0. 607570.59954 glm net 0.604333333 www.Sina.com/5.stacking stacking是一个分层模型集成框架。 以两个级别为例,第一级由多个基本学习器组成,其输入是原始训练集,第二级模型由

以第一层基学习器的输出作为训练集进行再训练,从而得到完整的stacking模型。

简单来说:数据集有Train和Test,模型对一层有5个基模型,第二层自己去构造(通常为线性模型LR)。

1.将Train划分5个小train,分别为train1,train2,train3,train4,train5。

将5个train进行组合有:

(1)训练集:train2,train3,train4,train5。预测集:train1

(2)训练集:train1,train3,train4,train5。预测集:train2

(3)训练集:train1,train2,train4,train5。预测集:train3

(4)训练集:train1,train2,train3,train5。预测集:train4

(5)训练集:train1,train2,train3,train4。预测集:train5

2.将(1),(2),(3),(4),(5)分别去训练、预测基模型1,得到5个预测结果,将这5个结果称作:元特征集1

将(1),(2),(3),(4),(5)分别去训练、预测基模型2,得到5个预测结果,将这5个结果称作:元特征集2

将(1),(2),(3),(4),(5)分别去训练、预测基模型3,得到5个预测结果,将这5个结果称作:元特征集3

将(1),(2),(3),(4),(5)分别去训练、预测基模型4,得到5个预测结果,将这5个结果称作:元特征集4

将(1),(2),(3),(4),(5)分别去训练、预测基模型5,得到5个预测结果,将这5个结果称作:元特征集5

3.将5个元特征集进行拼接得到完整的元特征集,将完整元特征集作为第二层模型的训练集。

4.对于Test,在每次基模型训练好时预测,再将预测值做均值处理,得到新Test,作为第二层的Test。

更通俗的解释:

1.首先将所有数据集生成测试集和训练集(假如训练集为10000,测试集为2500行),那么上层会进行5折交叉检验,使用训练集中的8000条作为喂养集,剩余2000行作为验证集。

2.每次验证相当于使用了8000条数据训练出一个模型,使用模型对验证集进行验证得到2000条数据,并对测试集进行预测,得到2500条数据,这样经过5次交叉检验,可以得到5×2000条验证集的结果(相当于每条数据的预测结果),5×2500条测试集的预测结果。

3.接下来会将验证集的52000条预测结果拼接成10000行长的矩阵,标记为A1,而对于52500行的测试集的预测结果进行加权平均,得到一个2500一列的矩阵,标记为B1。

4.上面得到一个基模型在数据集上的预测结果A1、B1,这样当我们对3个基模型进行集成的话,相于得到了A1、A2、A3、B1、B2、B3六个矩阵。

5.之后我们会将A1、A2、A3并列在一起成10000行3列的矩阵作为training data,B1、B2、B3合并在一起成2500行3列的矩阵作为testing data,让下层学习器基于这样的数据进行再训练。

6.再训练是基于每个基础模型的预测结果作为特征(三个特征),次学习器会学习训练如果往这样的基学习的预测结果上赋予权重w,来使得最后的预测最为准确。

需要注意的是,在生成第二层特征的时候,各个基模型要采用 相同的K-fold,这样得到的元特征的每一折(对应于之前的K折划分)都将不会泄露进该折数据的目标值信息 ,从而尽可能的降低过拟合的风险。

6.Blending

Blending与Stacking大致相同,只是Blending的主要区别在于训练集不是通过K-Fold的CV策略来获得预测值从而生成第二阶段模型的特征,而是建立一个Holdout集,例如10%的训练数据,第二阶段的stacker模型就基于第一阶段模型对这10%训练数据的预测值进行拟合。说白了,Blending用90%的数据做基学习器的训练,而10%留出集用作训练元学习器,这样基学习器和元学习是用不同数据集来训练的,把Stacking流程中的K-Fold CV 改成 HoldOut CV。

相比于Stacking,Blending能有效防止信息泄露,但也正因为如此,元学习器只用了较小部分的数据集进行训练,且容易对留出集过拟合。如果数据量有限,个人更偏好于Stacking


推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
  • 在IDEA中运行CAS服务器的配置方法
    本文介绍了在IDEA中运行CAS服务器的配置方法,包括下载CAS模板Overlay Template、解压并添加项目、配置tomcat、运行CAS服务器等步骤。通过本文的指导,读者可以轻松在IDEA中进行CAS服务器的运行和配置。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • 判断编码是否可立即解码的程序及电话号码一致性判断程序
    本文介绍了两个编程题目,一个是判断编码是否可立即解码的程序,另一个是判断电话号码一致性的程序。对于第一个题目,给出一组二进制编码,判断是否存在一个编码是另一个编码的前缀,如果不存在则称为可立即解码的编码。对于第二个题目,给出一些电话号码,判断是否存在一个号码是另一个号码的前缀,如果不存在则说明这些号码是一致的。两个题目的解法类似,都使用了树的数据结构来实现。 ... [详细]
author-avatar
百变精灵545
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有