模型融合和预测结果融合

news2024/9/25 17:17:18

模型融合和预测结果融合



文章目录

  • 模型融合和预测结果融合
    • 1. 模型融合提升技术
      • 1. Bagging 方法和随机森林
      • 2. Boosting 方法
    • 2. 预测结果融合策略
      • 1. Voting
      • 2. 软投票代码示例:
      • 3. Averaging 和 Ranking
      • 4. Blending
      • 5. Stacking
    • 3. 其他提升方法


1. 模型融合提升技术

  • 模型融合,即先产生一组个体学习器,再用某种策略将它们结合起来,以加强模型效果。
  • 为什么要进行模型融合呢?分析表明,随着集成中个体分类器数目 T 的增加,集成学习器的错误率将呈指数级下降,最终趋于0。通过融合可以达到“取长补短”的效果,综合个体学习器的优势能降低预测误差、优化整体模型性能。而且,个体学习器的准确性越高、多样性越大,模型融合的提升效果就越好。
  • 按照个体学习器的关系,模型融合技术可以分为两类:
    1. 个体学习器间不存在强依赖关系可同时生成的并行化方法,代表是 Bagging 方法随机森林
    2. 个体学习器间存在强依赖关系必须串行生成的序列化方法,代表是 Boosting 方法

1. Bagging 方法和随机森林

  • Bagging 方法是从训练集中抽样得到每个基模型所需要的子训练集,然后对所有基模型预测的结果继续综合,产生最终的预测结果,如下图所示:
    在这里插入图片描述* Bagging 方法采用的是自助采样法(Bootstrap sampling),即对于 m 个样本的原始训练集,每次先随机采集一个样本放入采样集,接着把该样本放回,也就是说下次采样时该样本仍有可能被采集到,这样采集 m 次,最终可以得到 m 个样本的采样集。由于是随机采样,因此每次的采样集和原始的训练集不同,和其他采样集也不同,这样就可以得到多个不同的弱学习器。(注意,原始数据集 m 个样本,采集的新数据集也是 m 个样本
    *随机森林是对 Bagging 方法的改进,其改进之处有两点:基本学习器限定为决策树;除了在 Bagging 的样本上加扰动,在属性上也加上扰动,相当于在决策树学习的过程中引入了随机属性选择。对基决策树的每个节点,先从该结点的属性集合中随机选择一个包含 k 个属性的子集,然后从这个子集中选择一个最优属性用于划分。

2. Boosting 方法

  • Boosting 方法的训练过程为阶梯状,即基模型按照次序一一进行训练(实现上可以做到并行),基模型的训练集按照某种策略每次进行一定的转换,然后对所有基模型的预测结果进行线性综合,产生最终的预测结果,如下图所示:
    在这里插入图片描述
  • Boosting 方法中著名的算法有 AdaBoost 算法和提升数(Boosting Tree)系列算法。在提升树系列算法中,应用最广泛的是梯度提升树(Gradient Boosting Tree),下面逐一简要介绍。
    1. AdaBoost 算法:是加法模型、损失函数为指数函数、学习算法为前向分布算法时的二分类算法。
    2. 提升树:是加法模型、学习算法为前向分布算法时的算法,基本学习器限定为决策树。对于二分类问题,损失函数为指数函数,就是把 AdaBoost 算法中的基本学习器限定为二叉决策树;对于回归问题,损失函数为平方误差,此时拟合的时当前模型的残差。
    3. 梯度提升树:是对提升树算法的改进。提升树算法只适合于误差函数为指数函数和平方误差,而对于一般的损失误差,梯度提升数算法可以将损失函数的负梯度在当前模型的值作为残差的近似值。

2. 预测结果融合策略

1. Voting

  • Voting(投票机制)分为软投票和硬投票两种,其原理采用少数服从多数的思想,此方法可用于解决分类问题。
    1. 硬投票:对多个模型直接进行投票,最终投票数最多的类为最终被预测的类。
    2. 软投票:和硬投票原理相同,其增加了设置权重的功能,可以为不同的模型设置不同的权重,进而区别模型不同的重要程度。

2. 软投票代码示例:

软投票代码示例链接

3. Averaging 和 Ranking

  • Averaging 的原理是将模型结果的平均值作为最终的预测值,也可以使用加权平均的方法。但其也存在问题:如果不同回归方法预测结果的波动幅度相差比较大,那么波动小的回归结果在融合时起的作用就比较小。
  • Ranking 的思想和 Averaging 的一致。因为上述平均法存在一定的问题,所以这里采用了把排名平均的方法。如果有权重,则求出 n 个模型权重比排名之和,即为最后的结果。

4. Blending

  • Blending 是把原始的训练集先分成两部分,如70%的数据作为新的训练集,剩下的30%的数据作为测试集。
  • 在第一层中,我们用70%的数据训练多个模型,然后去预测剩余30%数据的 label 。在第二层中,直接用30%的数据在第一层的结果作为新特则会给你继续训练即可。
  • Blending 的优点:Blending 比 Stacking 简单(不用进行 k 次交叉验证来获得 stacker feature),避开了一些信息泄露问题,因为 generlizers 和 stacker 使用了不一样的数据集。
  • Blending 的缺点:
    1. 使用了很少的数据(第二阶段的 blender 只是用了训练集10%的数据量)。
    2. blender 可能会过拟合。

    说明:对于实践中的结果而言,Stacking 和 Blending 的效果差不多。

5. Stacking

  • Stacking 的基本原理是用训练好的所有基模型对训练集进行预测,将第 j 个基模型对第 i 个训练样本的预测值作为新的训练集中第 i 个样本的第 j 个特征值,最后基于新的训练集进行训练。同理,预测的过程也要先经过所有基模型的预测形成新的测试集,最后对测试集进行预测,如下图所示:
    在这里插入图片描述
  • Stacking 是一种分层模型集成框架。以两层为例:第一层由多个基学习器组成,其输入为原始的训练集;第二层的模型则是以第一层学习器的输出作为训练集进行训练,从而得到完整的 Stacking 模型。Stacking 两层模型都使用了全部的训练集数据。
  • 下面举例进一步说明:
    1. 有训练集和测试集两组数据,并将训练集分成5份:train1, train2, train3, train4, train5。
    2. 选定基模型。这里假定我们选择了 xgboost,lightgbm,randomforest 作为基模型。比如 xgboost 模型部分,依次用 train1, train2, train3, train4, train5 作为验证集,其余4份作为训练集,然后5折交叉验证进行模型训练,再在测试集上进行预测。这样会在得到在练集上由 xgboost 模型训练出来的5份 predictions 和测试集上的1份预测值 B1,然后将5份 predictions 纵向重叠合并起来得到 A1。lightgbm 和 randomforest 模型部分同理,如下图所示:
      在这里插入图片描述
  1. 在三个基模型训练完毕后,将三个模型在训练集上的预测值分别作为3个“特征” A1,A2,A3,然后使用 LR 模型进行训练并建立了 LR 模型。
  2. 使用训练好的 LR 模型,在三个基模型的测试集上预测得到“特征”值(B1,B2,B3)的基础上进行预测,得出最终的预测类别或概率。

说明:在做 stacking 的过程中,如果将第一层模型的预测值和原始特征合并加入第二层模型的训练中,则可以使模型的效果更好,还可以防止模型的过拟合。

3. 其他提升方法

  • 通过对权重或者特征重要性的分析,可以准确找到重要的数据和字段及相关的特征方向,并可以朝着此方向继续细化,同时寻找这个方向更多的数据,还可以做相关的特征组合,这些都可以提高模型的性能。
  • 通过 Bad-Case 分析,可以有效找到预测不准确的样本点,进而回溯分析数据,寻找相关的原因,从而找到提升模型精度的方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/430486.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一个Java线程的线生(线生 vs 人生)

java线程的使用 1. Java多线程概述 下面我们看下Java的多线程 1.1 java天生就是多线程的 一个Java程序从main()方法开始执行,然后按照既定的代码逻辑执行,看似没有其他线程参与,但实际上Java程序天生就是多线程程序,因为执行main…

设计模式 -- 建造者模式

前言 月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂) 央是一片海洋,海乃百川,代表着一块海绵(吸纳万物) 泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出) 月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容 希望大家一起坚持这个过程,也同…

WPF教程(四)--Dispatcher

一、Dispatcher介绍 微软在WPF引入了Dispatcher,那么这个Dispatcher的主要作用是什么呢? 不管是WinForm应用程序还是WPF应用程序,实际上都是一个进程,一个进程可以包含多个线程,其中有一个是主线程,其余的是…

Embodied AI 具身智能

大模型的时代的到来,现在的大模型的参数几乎是几何级数的上升。 谷歌和柏林工业大学的团队重磅推出了史上最大视觉语言模型——PaLM-E:An Embodied Multimodal Language Model。通才大模型PaLM-E,什么是通才模型,就是多任务统一学…

NeRF必读:NeuS--三维重建的milestone以及脑补的作者脑回路

前言 NeRF从2020年发展至今,仅仅三年时间,而Follow的工作已呈井喷之势,相信在不久的将来,NeRF会一举重塑三维重建这个业界,甚至重建我们的四维世界(开头先吹一波)。NeRF的发展时间虽短&#xf…

C++入门(前篇)

🔥🔥本章重内容 C入门 1.命名空间2. C输入&输出3. 缺省参数 简单的说一下C语言的出现是为了弥补C语言的不足 由于要补充的东西太多,所以就在C语言的基础上又出了C 所以我认为学习C的前提是你得懂C语言 C中可以使用C的大部分语法 可以这样…

Autowired注解与Resource注解的区别

两者的用法 其实这两个注解的作用都一样,都是在做bean的注入,在使用过程中,两个注解有时候可以替换使用 两者的共同点 Resource注解和Autowired注解都可以用作bean的注入.在接口只有一个实现类的时候,两个注解可以互相替换,效果相同. 两者的不同点 Resource注解是Java自身的…

技术分享 | OceanBase 手滑误删了数据文件怎么办

作者:张乾 外星人2号,现兼任六位喵星人的资深铲屎官。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 手滑误删了数据文件,并且没有可替换的节点时&…

代码随想录第19天 | 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点

235. 二叉搜索树的最近公共祖先 var lowestCommonAncestor function(root, p, q) {// 使用递归的方法// 1. 使用给定的递归函数lowestCommonAncestor// 2. 确定递归终止条件if(root null) {return root;}if(root.val > p.val && root.val > q.val) {// 向左子…

set、map容器

一、set 1. set基本概念 简介: 所有元素都会在插入时自动被排序 本质: set/multiset属于关联式容器&#xff0c;底层结构是用二叉树实现。 set和multiset区别: set不允许容器中有重复的元素 multiset允许容器中有重复的元素 2. set构造和赋值 构造: set<T> st; …

安装WMware16、centos7记录

将一台闲置电脑安装虚拟机&#xff0c;计划给个8G内存&#xff0c;80G硬盘&#xff0c;打算安装WMware16&#xff0c;对系统要求是win10 一、将win7升级到win10 1.1、正版的win10安装U盘制作教程 https://www.bilibili.com/video/BV1AW411G7Lq/?vd_sourcecaf04463d06774efd…

Okio 网络提速

文章目录网络数据处理流程Page Cache传统 I/O 拷贝的性能问题零拷贝技术DMA 技术零拷贝技术分类mmapsendfilespliceDirect I/O零拷贝技术性能分析小结OkioOkio 的使用Okio 网络提速的原理Okio 总结总结网络数据处理流程 在讲 Okio 之前&#xff0c;为了能更好的了解 Okio 的优…

如何制定项目里程碑 它的作用体现在哪

制定项目里程碑是项目管理中的一个重要步骤&#xff0c;它可以帮助团队确立项目目标、分解任务、评估风险、规划资源和监控进度。在这篇文章中&#xff0c;我们将介绍如何制定项目里程碑和它的作用。 如何制定项目里程碑 制定项目里程碑需要遵循以下步骤&#xff1a; 1、确定…

《程序员面试金典(第6版)》面试题 10.01. 合并排序的数组

题目描述 给定两个排序后的数组 A 和 B&#xff0c;其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法&#xff0c;将 B 合并入 A 并排序。 初始化 A 和 B 的元素数量分别为 m 和 n。 示例: 输入: A [1,2,3,0,0,0], m 3 B [2,5,6], n 3 输出: [1,2,2,3,5,6] 说明: …

简单六步,帮助HR高效管理零工

AIHR发布的《2023人力资源趋势》中提到&#xff0c;过去HR往往只关注全职员工&#xff0c;忽略了其他劳动力生态系统成员&#xff0c;比如零工、外包员工和临时工等&#xff0c;而如今这些劳动力生态系统的成员在公司的服务交付中发挥着越来越重要的作用。△ 传统劳动力生态系统…

Java入坑之集合、流与序列化

一、集合 1.1集合定义 集合概念&#xff1a; 保存和盛装数据的容器&#xff0c;将许多元素组合成一个单一单元的容器对象。集合&#xff0c;可用于存储/检索/操作/传输/聚合数据集合框架&#xff1a; 表示和操作集合的体系&#xff0c;包括接口、实现类&#xff0c;集合框架的…

【Nav2】Ubuntu18+ROS2 Eloquent跑通Navigation2仿真示例

【背景】 打算通过Navigation2来了解ROS2的核心两大件——LifeCircle和BehaviorTree&#xff0c;结果根据官网的教程一顿鼓捣&#xff0c;这个Turtlbot3的仿真就是跑不起来&#xff0c;这怎么能忍&#xff1f;虽然在Ubuntu20上使用Foxy版本可以非常容易就跑通demo&#xff0c;…

3年外包终上岸,我只能说:但凡有点机会,千万别去外包...

我大学学的是计算机专业&#xff0c;毕业的时候&#xff0c;对于找工作比较迷茫&#xff0c;也不知道当时怎么想的&#xff0c;一头就扎进了一家外包公司的软件测试岗&#xff0c;一干就是3年。现在终于跳槽到了互联网公司了&#xff0c;我想说的是&#xff0c;但凡有点机会&am…

behaviac —— Win10下Vs2017编译“腾讯行为树“源码

简介 - 腾讯行为树 behaviac是游戏AI的开发框架组件,也是游戏原型的快速设计工具。支持全平台,适用于客户端和服务器,助力游戏快速迭代开发 。编辑器可以运行在PC上,操作方便直观可靠,支持实时和离线调试;编辑器可以导出xml,bson等多种格式,更可以导出C++、C#源码,提供…

免费1年服务器,部署个ChatGPT专属网页版

作者&#xff1a;小傅哥 博客&#xff1a;https://bugstack.cn 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; 白皮袄个免费1年服务器&#xff0c;部署个ChatGPT专属网页版&#xff01; api.openai.com port 443: Connection timed out 你是…