热门标签 | 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


推荐阅读
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 本文详细介绍了如何在 Windows 环境下使用 node-gyp 工具进行 Node.js 本地扩展的编译和配置,涵盖从环境搭建到代码实现的全过程。 ... [详细]
  • 在 Flutter 开发过程中,开发者经常会遇到 Widget 构造函数中的可选参数 Key。对于初学者来说,理解 Key 的作用和使用场景可能是一个挑战。本文将详细探讨 Key 的概念及其应用场景,并通过实例帮助你更好地掌握这一重要工具。 ... [详细]
  • 尽管深度学习带来了广泛的应用前景,其训练通常需要强大的计算资源。然而,并非所有开发者都能负担得起高性能服务器或专用硬件。本文探讨了如何在有限的硬件条件下(如ARM CPU)高效运行深度神经网络,特别是通过选择合适的工具和框架来加速模型推理。 ... [详细]
  • Git管理工具SourceTree安装与使用指南
    本文详细介绍了Git管理工具SourceTree的安装、配置及团队协作方案,旨在帮助开发者更高效地进行版本控制和项目管理。 ... [详细]
  • 目录一、salt-job管理#job存放数据目录#缓存时间设置#Others二、returns模块配置job数据入库#配置returns返回值信息#mysql安全设置#创建模块相关 ... [详细]
  • Nginx 反向代理与负载均衡实验
    本实验旨在通过配置 Nginx 实现反向代理和负载均衡,确保从北京本地代理服务器访问上海的 Web 服务器时,能够依次显示红、黄、绿三种颜色页面以验证负载均衡效果。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • python的交互模式怎么输出名文汉字[python常见问题]
    在命令行模式下敲命令python,就看到类似如下的一堆文本输出,然后就进入到Python交互模式,它的提示符是>>>,此时我们可以使用print() ... [详细]
  • 本文介绍了在安装或运行 Python 项目时遇到的 'ModuleNotFoundError: No module named setuptools_rust' 错误,并提供了解决方案。 ... [详细]
  • 本教程详细介绍了如何使用 TensorFlow 2.0 构建和训练多层感知机(MLP)网络,涵盖回归和分类任务。通过具体示例和代码实现,帮助初学者快速掌握 TensorFlow 的核心概念和操作。 ... [详细]
  • 社交网络中的级联行为 ... [详细]
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社区 版权所有