【机器学习之模型融合】Voting投票法基础理论

news2024/11/19 20:35:29

 

目录

1、认识模型融合🌸

2、模型融合和集成算法的区别🌹

3、常见模型融合方式🍁

4、投票法Voting🌿

4.1、不同的投票方法🌴


1、认识模型融合🌸

  • 在机器学习竞赛界,流传着一句话:当一切都无效的时候,选择模型融合。这句话出自一位史上最年轻的Kaggle Master之口,无疑是彰显了模型融合这一技巧在整个机器学习世界的地位。如果说机器学习是人工智能技术中的王后,集成学习(ensemble Learning)就是王后的王冠,而坐落于集成学习三大研究领域之首的模型融合,则毫无疑问就是皇冠上的明珠,熠熠生辉,夺人眼球。
  • 为什么模型融合如此受学者们青睐呢?模型融合在最初的时候被称为“评估器结合”,与集成算法(狭义)一样,它也是训练多个评估器、并将多个评估器以某种方式结合起来解决问题的机器学习方法。我们都知道,集成算法(狭义)是竞赛高分榜统治者,但在高分榜上最顶尖的那部分战队一定都使用了相当丰富的模型融合技巧因为模型融合能够在经典集成模型的基础上进一步提升分数,使用模型融合技巧后、融合算法的效果常常可以胜过当前最先进的单一集成算法。正是这一有效的提分能力,让模型融合在竞赛界具有很高的地位。也因此,模型融合是提分的最终手段。

2、模型融合和集成算法的区别🌹

  • 直观印象:训练的基础不同

    集成算法(狭义):青铜算法+人海战术

    • 以Bagging和Boosting代表的集成算法(狭义)可以说是使用青铜算法+人海战术。在集成时,我们一般使用数百棵决策树、甚至树桩这样的弱评估器,构成强大的学习能力。
       
    • 在这个过程中,由于评估器数量很多,因此每个评估器贡献自己的一小步(Boosting)、或者一小点意见(Bagging),没有任何弱评估器可以在数据集上直接给出优秀的结果。因此从本质上来说,集成算法还是一个算法,弱评估器本身不具备有效预测能力。
       

    模型融合:王者算法+精英敢死队

    • 模型融合则使用王者算法+精英敢死队战术。在融合时,我们往往构建最多数十个Xgboost、神经网络这样的强评估器,再设计出强大的规则来融合强评估器的结果。或者,我们使用少数几个很强的学习器处理特征,再让将新特征输入相对较弱的学习器,以此来提升模型表现。
       
    • 在这个过程中,由于评估器很少,所以每个评估器的贡献都很大,即便不融合,单一评估器也可以直接在数据集上给出优秀的结果。因此从本质上来说,模型融合是囊括多个算法的技巧,而并非一个算法。

不难发现:通过集成,我们让算法从弱到强,但通过融合,我们让算法从强到更强面对同样的预测任务,集成算法会努力获得一个好结果,而模型融合则是将许多好结果融合在一起,得到更好的结果。


  • 统计方面:假设空间不同,泛化能力不同

    集成算法(狭义):一维假设空间

    • 每个算法都是一套独一无二的、从数据到结论的计算流程,这一流程在统计学上被称为是“对样本与标签关系的假设”。例如,KNN假设,相同类别的样本在特征上应该相似。Boosting算法假设令单一损失函数最小的树一定可以组成令整体损失最小的树林。
       
    • 我们可以有不同的假设,但在有限的训练数据集上,我们很难看出哪个假设才是对贴近于真实样本标签关系的假设。这就是说,我们无法保证现在表现好的算法在未知数据集上表现也一定会好因此使用单一假设/单一算法的缺点就很明显:虽然在当前数据集上当前假设表现最好,但如果其他假设才更贴近数据真实的情况,那当前选择出的模型的泛化能力在未来就无法得到保证了。
       

    模型融合:高维假设空间

    • 相对的,如果能够将不同的假设结合起来,就可以降低选错假设的风险。最贴近数据真实状况的假设,即便在当前数据集上表现并不是最好的,但在融合之后可以给与融合的结果更强大的泛化能力。
       
    • 同时,假设真正的数据规律并不能被现在的数据代表,那融合多个假设也能够拓展假设空间,不同假设最终能够更接近真实规律的可能性也越大。

因此,从统计学的角度来说,模型融合能够:(1) 降低选错假设导致的风险、(2)提升捕捉到真正数据规律的可能性、(3)提升具有更好泛化能力的可能性


  • 计算方面:起点数量不同,模型表现不同

    集成算法(狭义):只有一组起点,最终只能得到一个局部最小值

    • 许多算法在搜索时都会陷入局部最优解,即便有足够多的训练数据,我们也无法判断能否找到理论上真实的最小值。一般在算法训练时,我们把搜索出的局部最小值当作是真实最小值的近似值,但我们却无法估计真实最小值与局部最小值之间有大多的差异。但由于我们只有一个局部最小值,真实最小值在哪里完全没有头绪。
       

    模型融合:多组不同的起点,最终得到一个局部最小值的范围

    • 模型融合过程中,每个算法都会有自己的起点、并最终获得多个不同的局部最小值。虽然这些局部最小值当中,没有任意一个等于真正的最小值,但真正的最小值很大可能就在这些局部最小值构成的范围当中。通过结合局部最小值,可以获得更接近真实最小值的近似值,从而提升模型的精度。

因此,从计算方面来看,模型融合能够:(1)降低选错起点假设的风险、(2)降低局部最小值远远偏离真实值的风险、(3)提升算法结果更接近真实最小值的可能性


3、常见模型融合方式🍁

当算法出现统计学方面的问题时,模型一般表示为高方差、低偏差(更换数据之后模型表现非常动荡)。当算法出现计算方面的问题时,模型一般表示为高偏差、低方差(无论换什么数据,局部最小值都远离真正的最小值)。因此,理论上来说,模型融合这一技巧的上限非常高:我们可以同时降低方差和偏差、找到方差-偏差均衡的最优点。

现在,使用比较广泛的融合方式有如下4种:

  • 均值法Averaging:适用于回归类算法,将每个评估器的输出做平均,类似于Bagging中回归的做法。

  • 投票法Voting:适用于分类算法,按每个评估器的输出进行投票,类似于Bagging中分类的做法。

  • 堆叠法Stacking:使用一个或多个算法在训练集上输出的某种结果作为下一个算法的训练数据。其中比较著名的是gbdt+lr,其中逻辑回归lr使用gbdt输出的树结构数据作为训练数据。

  • 改进堆叠法Blending:一种特殊的stacking,使用一个或多个算法在验证集上输出的某种结果作为下一个算法的训练数据。


4、投票法Voting🌿

投票法是适用于分类任务的模型融合方法,也是在直觉上来说最容易理解的方法。简单来说,投票法对所有评估器输出的结果按类别进行计数,出现次数最多的类别就是融合模型输出的类别


4.1、不同的投票方法🌴

  • 相对多数投票 vs 绝对多数投票

    相对多数投票就是上面所提到的少数服从多数,即只要有一个备选类别占比较多即可。与之相对的是绝对多数投票:

    绝对多数投票要求至少有50%或以上的分类器都输出了同一类别,否则就拒绝预测。例如在5个分类器中,至少要有2.5个分类器都输出同一类别,样本才能够进行输出具体类别,否则则输出“不确定”,相当于增加一类输出类别。在机器学习当中,绝对多数投票可以帮助我们衡量当前投票的置信程度。票数最多的类别占比越高,说明融合模型对当前样本的预测越有信心。当票数最多的类别占比不足50%时,重新投票对于机器学习来说效率太低,因此我们往往会选择另一种方案:我们可以使用相对较弱的学习器进行绝对多数投票融合、并将绝对多数投票中被输出为“不确定”的样本交由学习能力更强的模型进行预测,相当于将“困难样本”交由复杂度更高的算法进行预测,这也是一种融合方式。

  • 硬投票 vs 软投票

    大多数分类模型的模型输出结果可以有两种表示方式:

    • 表示为二值或多值标记,即算法输出值为[0,1]或[1,2,3]这样的具体类别。
       
    • 表示为类别概率,即算法输出值为(0,1)之间的任意浮点数,越靠近1则说明算法对当前类别预测的置信度越高。我们需要规定阈值、或使用softmax函数的规则来将浮点数转换为具体的类别。
       

    基于此,我们可以将投票分成两种类型:

    硬投票:将不同类别的出现次数进行计数,出现次数最多的类别就是投票结果

    软投票将不同类别下的概率进行加和,概率最高的类别就是投票结果。基于概率的软投票可以衡量投票的置信程度,某一类别下的概率越高,说明模型对该类别的预测结果越有信心。


  • 软投票和硬投票得出的结果可能不同,这是因为软投票有一种“窥探心灵”的能力(也就是衡量置信度的能力)。
  • 在实际进行投票法融合时,我们往往优先考虑软投票 + 相对多数投票方案,因为软投票方案更容易在当前数据集上获得好的分数。然而,如果我们融合的算法都是精心调参过的算法,那软投票方案可能导致过拟合。因此具体在使用时,需要依情况而定。

  • 加权投票

    除了基于概率、基于类别进行投票、以及使用绝对多数、相对多数进行投票之外,还有一种可以与上述方式结合的投票方法,即加权投票。加权投票是在投票过程中赋予不同分类器权重的投票,具体表现在:

    • 对于硬投票,加权投票可以改变每一个分类器所拥有的票数。
    • 对于软投票,加权投票可以改变每一个分类器所占的权重,令概率的普通加和变成加权求和。

具体来看,硬投票情况下,现在,我们再按照类别进行计数,类别3的票数为(0.3 + 0.8 + 0.6 = 1.7票),而类别2的票数为(0.5 + 0.2 = 0.7)票,因此票数占比更多的是类别3,融合模型输出类别3。

不难发现,当调整权重之后,最终输出的结果依然是类别2,但是加权之后整体算法对于类别2的置信度是降低的、对于类别3的置信度是提升的。因此,修改权重很可能会影响融合模型最终的输出。通常来说,我们会给与表现更好的分类器更多的权重,但并不会给与它过多的权重,否则会过拟合。
大多数时候,我们可能会主观地认为,加权后的模型比未加权的模型更强大,因为加权求和比普通求和更复杂、加权平均也比普通平均更复杂。但事实上,无论是从实验还是理论角度,加权方法并没有表现出比一般普通方法更强的泛化能力。在某些数据上,加权会更有效,但如果强评估器之间的结果差异本来就不大,那加权一般不会使模型结果得到质的提升。


今天好冷。小年快乐。

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

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

相关文章

redis基本数据结构使用与场景

string(字符串)用法使用场景list(列表)用法使用场景set(不可重复,乱序的集合)用法使用场景zset (相对于set集合 增加了score属性,score可用于排序)用法使用场…

持续集成:使用Jenkins API创建视图

持续集成:通过Jenkins API创建项目和节点介绍了使用jenkins API来创建项目和新建节点,jenkins API也可以创建视图(view)。 目录1. 获取视图配置文件2. 创建视图3. 将job添加到视图1. 获取视图配置文件 jenkins API创建视图&#…

Golang学习之路——之tinyrpc源码阅读

tinyrpc是一个高性能的基于protocol buffer的rpc框架。项目代码非常少,很适合初学者进行golang的学习。 如果你正在为没有资料学习发愁,文末有相关的学习资料获取方式 tinyrpc功能 tinyrpc基于TCP协议,支持各种压缩格式,基于pr…

Junit单元测试

Junit测试简介什么是单元测试单元测试是针对最小的功能单元编写测试代码Java程序最小的功能单元是方法单元测试就是针对单个Java方法的测试测试驱动开发(TDD)使用main()方法测试的缺点:只能有一个main()方法,不能把测试代码分离没有打印出测试结果和期望…

python+vue2+nodejs 搜索引擎课设 SCAU数信学院本科生通知检索(附源码)

前言 这个系统主要实现了以下功能: 爬虫:数据爬取及分词后端:数据库全文模糊搜索、高频词获取前端:输入拼音缩写或文字后匹配输入建议、搜索、列表分页、高亮关键词、相关度排序及时间排序、深色模式及浅色模式切换 爬虫&#x…

兔八哥与猎人

兔八哥与猎人 题目描述 兔八哥躲藏在树林旁边的果园里。果园有 MNM \times NMN 棵树,组成一个 MMM 行 NNN 列的矩阵,水平或垂直相邻的两棵树的距离为 111。兔八哥在一棵果树下。 猎人背着猎枪走进了果园,他爬上一棵果树,准备杀…

springboot整合JSR303校验

4.7 JSR303校验 4.7.1 统一校验的需求 前端请求后端接口传输参数,是在controller中校验还是在Service中校验? 答案是都需要校验,只是分工不同。 Contoller中校验请求参数的合法性,包括:必填项校验,数据…

Python_内置函数

1、abs():绝对值 2、all():接受一个可迭代对象,如果对象里的所有元素的bool运算值都是True,那么返回True,否则返回False 3、any():接受一个可迭代对象,如果对象里有一个元素的bool运算值都是True&#xff0…

CSS实现从下至上弹出的抽屉动画

从下至上展开抽屉动画<!DOCTYPE html> <html><head><meta charset"UTF-8"><meta name"viewport" content"initial-scale1.0, maximum-scale1.0, user-scalableno" /><title></title><style>.co…

码农抓取商品详情API调用,Json和XML等格式

API 指的 是一些预定义的函数&#xff0c; 可以 提供给应用程序和开发人员基于软件或硬件访问一组例程的 功能 &#xff0c; 而 不再需要访问源代码或理解内部工作机制细节。 API 可以用于 于开发使用相同数据的其他应用程序&#xff0c;比如公司&#xff0c;他们可以创建一个A…

携手向前,欧拉沙龙双品牌联合运营纯电赛道再提速

面对波诡云谲的市场环境和竞争格局&#xff0c;企业只有不断变革&#xff0c;才能赢得更多的发展机遇&#xff0c;拥有属于自己的生存空间。 在2022年12月底广州国际车展和今年1月初的海口新能源车展上&#xff0c;欧拉携好猫、好猫GT、芭蕾猫、闪电猫&#xff0c;沙龙携高端车…

【Linux】-- 进程程序替换

目录 引入进程程序替换 进程程序替换 初步使用exec系列函数 原理分析 做一个简易的shell cd - 内置命令的理解 export - 环境变量的深入理解 引入进程程序替换 对于fork的学习让我们知道&#xff1a;fork()之后的&#xff0c;父子进程各自执行父进程代码的一部分。但是创…

IO初识233

绝对路径和相对路径 路径是用来描述一个文件在电脑上的具体位置。 这里的 E:\绘画合集\CCE展会logo 2.0就是绝对路径 目录之间的分隔符可以用\也可以用/来表示 相对路径就是以一个基准路径&#xff08;工作路径&#xff09;&#xff0c;以基准路径为起点往下走要怎么表示目标…

Java字符串训练

Java字符串训练一、用户登录二、统计字符次数三、拼接字符串1. 使用String2. 使用StringBuilder四、字符串反转五、金额转换六、手机号屏蔽七、身份证信息查看八、敏感词替换九、对称字符串十、数字转罗马数字十一、调整字符串十二、打乱字符串一、用户登录 需求&#xff1a;已…

MySQL监控(一):了解SigNoz

1.SigNoz介绍 github SigNoz SigNoz官方文档 2022 年 11 大 MYSQL 监控工具 MySQL | 六个最常用的 MySQL 数据库监控工具 2.SigNoz安装 从官方文档上得知使用以下命令进行安装&#xff1a; git clone -b main https://github.com/SigNoz/signoz.git && cd signoz/d…

SpringSecurity(十三)【授权】

十三、授权 什么是授权权限管理核心概念Spring Security 权限管理策略基于 URL 地址的权限管理基于方法的权限管理实战 权限管理 身份认证&#xff0c;就是判断一个用户是否为合法用户的处理过程。SpringSecurity中支持多种不同方式的认证&#xff0c;但是无论开发者使用那种方…

【uniapp】uniapp使用高德地图定位打包成安卓app的一些记录,比如打包后定位失效、

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、创建你的uniapp1.打开Dcloud开发者后台2.下载你的证书、获取你的SHA1安全码、证书私钥密码二、打开高德开放平台申请key1.打开官网2.创建一个应用三、在unia…

快速傅里叶变换FFT和逆变换的python编程

0. 预备知识 快速傅里叶变换旨在解决离散傅里叶变换DFT计算量大效率低的问题。当我们想要抑制噪声提取出某段信号中的有效信息时&#xff0c;如系统模型辨识或者是使用高精度力传感器测量人体腕部寸关尺脉搏信号这类应用&#xff0c;应该如何设计采样流程&#xff1f; 首先&a…

《通讯录》思路及代码实现详解

目录 一、通讯录功能实现的详细描述 二、通讯录的代码及思路实现 2、1 定义联系人结构体 2、2 初始化就结构体与释放动态开辟空间的实现 2、3 菜单打印 2、4 添加联系人信息 2、5 删除联系人信息 2、6 查询联系人信息 2、7 修改联系人信息 2、8 打印所有联系人信息 2、9 排序整…

75. 序列模型的代码实现

1. 训练 在了解了上述统计工具后&#xff0c;让我们在实践中尝试一下&#xff01; 首先&#xff0c;我们生成一些数据&#xff1a;(使用正弦函数和一些可加性噪声来生成序列数据&#xff0c; 时间步为 1,2,…,1000 。) %matplotlib inline import torch from torch import nn…