当前位置: 首页 > news >正文

机器学习基础知识之多模型性能对比评价方法

文章目录

  • 1、交叉验证t检验
  • 2、Friedman检验与Nemenyi后续检验

在进行预测或分类对比实验时,通常需要比较两个或两个以上的模型性能,因此,下面将介绍两个常用的多模型性能对比评价方法,一种是交叉验证t检验,该方法主要用于同一个数据集上两个模型的性能比较,另一种是Friedman检验与Nemenyi后续检验,这一方法主要用于同一组数据集上两个以上模型的性能比较。

1、交叉验证t检验

之前介绍过k折交叉验证方法,该方法将同一个数据集随机平均分成k份,然后让每一份依次作为测试数据集,余下数据作为训练数据集,使模型在训练数据集上训练后在测试数据集上进行测试以获得该模型在每份数据集上的误差,最后将误差值进行平均即为模型在此数据集上的最终误差值。而交叉验证t检验则是专门针对两个不同的模型在同一个数据集上进行k折交叉验证后的性能比较方法。
假设对于两个不同的模型A与模型B,在同一个数据集上进行k折交叉验证后得到的每份数据集上的误差分别如下:
在这里插入图片描述

则需要将这两个模型在k份测试数据集上的误差进行一对一的比较,而当这两个模型的性能相同时,则这两个模型在同一份测试数据集上误差应该相同,即:
在这里插入图片描述

i为1到k之间的任意正数。
其具体的比较过程为首先对两个模型在k份测试数据集上的误差进行一对一的比较,求取它们之间的差值,计算公式如下:
在这里插入图片描述

然后对求得的差值∆_1,∆_2,…,∆_k进行均值与方差的计算,计算获得的均值与方差分别为μ和σ^2,在显著度α下,倘若变量
在这里插入图片描述

小于临界值t_(α/2,k-1),则可以视作这两个模型的性能没有显著差别。若大于该临界值,则这两个模型的性能存在显著差别,其中平均误差较小的模型的性能更好。上述临界值t_(α/2,k-1)是自由度为k-1的t分布上尾部累积分布为α/2的临界值。
由于是在同一份数据集上进行交叉验证,因此当数据量较少时容易使得不同训练数据集之间容易存在一定程度的重叠,进而导致最后容易认为两个模型性能不存在显著差别。为了避免这一问题,一般采用“5×2交叉验证法”。
5×2交叉验证是指在数据量较少时,对两个模型进行5次2折交叉验证,其中在每次2折交叉验证前将数据集进行随机打乱,从而使5次验证过程中数据集的划分均不重复。
在上述2折交叉验证中分别计算获得两个不同的差值:
在这里插入图片描述

为了使误差结果更具有独立性,将第一次交叉验证中这两个不同的差值的平均值μ作为判断依据,在对方差进行求取时则是对每次交叉验证的差值结果进行计算,计算公式如下:
在这里插入图片描述

倘若变量
在这里插入图片描述

小于临界值t_(α/2,5),即服从自由度为5的t分布时,这两个模型的的性能没有显著差别,否则存在显著差别,其中平均误差较小的模型的性能更好。在此计算公式下,当α取值为0.05时,临界值t_(α/2,5)为2.5706,当α取值为0.1时,临界值t_(α/2,5)为2.015。

2、Friedman检验与Nemenyi后续检验

上述交叉验证t检验是在一个数据集上对两个不同的模型性能进行比较,而当需要在一组数据集上对多个模型的性能进行比较时,则需要使用Friedman检验。Friedman检验是一种基于模型性能排序的检验方法,它在同一个数据集上依据某些性能评价指标对多个模型的性能好坏进行排序,进而获得多个模型在一组数据集上的性能排序结果,依照此结果平均计算得到在这组数据集上的平均性能排序,倘若不同模型的性能相同时,它们的平均性能排序应该相同。
假设使用三个不同的模型A、模型B以及模型C在三个不同数据集D_1、D_2、D_3上进行预测实验,通过使用上一小节中提到的预测性能评价指标均方误差对它们的预测性能进行评价,倘若在数据集D_1上三个模型的均方误差值大小排序依次为模型A、模型B和模型C,那么将对模型A、模型B和模型C分别赋予序值1,2,3。按照此方法,对这三个模型在另外两个数据集上的均方误差值大小进行排序,可获得模型性能排序表如下所示。
在这里插入图片描述

上表中在数据集D_2上,当两个模型的均方误差值相同时,则对它们的序值进行平分,即出现模型B与模型C的序值均为2.5的情况。最后一行则是通过对这三个模型在三个不同数据集上的性能序值求平均而得到平均序值,当不同模型的平均序值相同时,可以视作这两个模型的性能相同。
为了方便判断,直接通过计算变量
在这里插入图片描述

来确定模型的性能是否相同,上式中r_i表示第i个模型性能的平均序值,N为数据集的个数,k为模型的个数,抛开平均序值的考虑时,(k+1)/2为符合正太分布的r_i的均值,方差为(k^2-1)/12N。
当k与N都较大时,该变量服从自由度为k-1的χ^2分布。
上述变量的计算方式较为保守,现在通常使用变量
在这里插入图片描述

来进行判断,其中τ_F服从自由度为k-1和(k-1)(N-1)的F分布,当计算之后变量τ_F小于临界值时,可以视作这几个对比模型的性能没有显著差别,若大于该临界值,则这几个对比模型的性能显著不同。下面两张表分别是显著度为0.05与0.1时的常用临界值。
在这里插入图片描述

在这里插入图片描述

通过将变量τ_F与常用临界值的大小进行比较,从而确定不同模型之间的性能是否显著相同,当确定显著不同时,则需要使用Nemenyi后续检验来对其不同模型的性能做进一步的区分。
在进行Nemenyi后续检验时需要通过下列公式计算得出模型平均序值差别的临界值域,具体的计算公式如下:
在这里插入图片描述

其中q_α通常采用下表中的值。
在这里插入图片描述

当两个模型的平均序值之差超过了计算得出的临界值域CD,则可以确定两个模型之间存在明显差别。另外对上述结果的比较检验将通过Friedman检验图进行更为清晰的表示,在Friedman检验图中,横轴为平均序值,纵轴表示不同的模型,当代表两个模型的横线之间不存在交叠时,则说明两个模型之间存在显著差别,否则它们之间不存在显著差别,常见的Friedman检验图如下图所示。
在这里插入图片描述

在上图中,代表模型1的直线的边缘与代表模型2和模型3的直线明显存在交叠,则说明这三个模型之间不存在显著区别,但从它们的平均序值可以看到模型1的平均序值大于模型2与模型3,因此模型1的性能略优于另外两个模型。另外代表模型1的直线与代表模型4与模型5的之间之间不存在交叠,则说明模型1与另外两个模型之间存在显著区别,且其平均序值最大,即模型1的性能明显优于模型4与模型5。结合上述比较结果可以得知,模型1的性能在这五个模型中表现最好。
在对Friedman检验与Nemenyi后续检验可以得知,此方法主要用于在一组数据集上对多个模型的性能进行比较,而在实际应用过程中,可以将此方法进行扩展,例如在群智能优化算法的性能进行比较时,可以使用此方法比较多种不同的算法在一组测试函数上的性能;当对一个数据集上的多种预测模型性能进行比较时,可以计算得出模型的多种性能指标结果,然后比较多种性能指标上的模型性能情况。

相关文章:

机器学习基础知识之多模型性能对比评价方法

文章目录 1、交叉验证t检验2、Friedman检验与Nemenyi后续检验 在进行预测或分类对比实验时,通常需要比较两个或两个以上的模型性能,因此,下面将介绍两个常用的多模型性能对比评价方法,一种是交叉验证t检验,该方法主要用…...

对敏感信息脱敏,如对姓名、证件号码、手机号码、银行卡号码进行脱敏

一、姓名脱敏 1、脱敏规则一:显示姓名中的第一个字,其它用*号代替。 显示姓名中的第一个字,如为英文等其他语种,也是显示第一个字母。其它用*号代替。 ① 举例 张* 王** A**** ② 实现方法 hideName(name) {if (!n…...

创建型——单例模式C++实现

单例模式即保证一个类只有一个实例&#xff0c;并提供一个访问该单例的接口。 实例 1.懒汉式 用的时候才创建单例&#xff0c;“懒”。 Singleton.h #ifndef SINGLETON_H_ #define SINGLETON_H_#include <iostream> #include <string> #include <mutex>…...

【华为OD统一考试B卷 | 100分】执行时长(C++ Java JavaScript Python)

文章目录 题目描述输入描述输出描述ACM输入输出模式用例机考代码查重C++javascriptjavapython题目描述 为了充分发挥GPU[算力],需要尽可能多的将任务交给GPU执行,现在有一个任务数组,数组元素表示在这1秒内新增的任务个数且每秒都有新增任务。 假设GPU最多一次执行n个任务,…...

操作系统原理 —— 内存管理的概念(十八)

为什么要有内存管理 为什么要对内存进行管理&#xff0c;需要解决什么问题&#xff1f; 要回答这个问题&#xff0c;首先我们需要明白&#xff1a;进程运行时&#xff0c;需放在内存才能运行。比如在执行一个程序时&#xff0c;需将该程序的相关数据与指令装入内存才能运行。…...

GPT-4国内怎么用

GPT-4是OpenAI推出的最新的生成式AI模型&#xff0c;作为ChatGPT的进化版&#xff0c;它在回答准确性、识图能力、生成歌词和创意文本等方面有了显著的提升。然而&#xff0c;由于网络限制&#xff0c;国内用户无法直接访问官方网站。那么&#xff0c;GPT-4在国内如何使用呢&am…...

搭建LightPicture开源免费图床系统「公网远程控制」

文章目录 1.前言2. Lightpicture网站搭建2.1. Lightpicture下载和安装2.2. Lightpicture网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 转载自cpolar极点云的文章&#xff1a;【搭建私人图床】使用LightPicture开源…...

shell编程lesson06

流控制 while 和 until 循环 #!/bin/bash# while-count:display a series of numbersi1 while [ $i -le 5 ];doecho $ii$((i1)) done echo "Finished!"while命令的语法结构如下&#xff1a; while commands;do commands;done 我们可以使用while循环改进上一节中的…...

国内免费可用的ChatGPT网页版

ChatGPT 一、ChatGPT是个啥&#xff1f;二、16个国内免费的ChatGPT网站。三、ChatGPT使用方式 一、ChatGPT是个啥&#xff1f; chat&#xff1a;表示“聊天”。 GPT&#xff1a;则是Generative、Pre-trained、Transformer的缩写&#xff0c;表示“预训练语言模型”&#xff0…...

用同样的关键词测试不同的人工智能

测试词汇&#xff1a;用“电商、接口、店群”写一篇关于API接口的推广软文 返回结果&#xff1a; 人工智能1&#xff1a; 电商行业已经进入了全面数字化转型的时代&#xff0c;而API接口技术正是数字化转型的重要组成部分。随着移动端、小程序等终端越来越普及&#xff0c;A…...

shell变量类型含义 长方形面积计算 截取相应字段方法

1.总结变量的类型及含义&#xff1f; 2.实现课堂案例计算长方形面积&#xff1f;&#xff08;6种方式&#xff09; 3.定义变量urlhttps://blog.csdn.net/weixin_45029822/article/details/103568815&#xff08;通过多种方法实现&#xff09; 1&#xff09;截取网站访问的协议 …...

Java:从单线程计数器到多线程数据同步synchronized和原子类Atomic

目录 使用单线程使用多线程使用多线程 synchronized使用多线程 原子类AtomicLong 使用单线程 单线程修改计数器的值&#xff0c;没有发生问题&#xff0c;每次运行结果都是10000&#xff0c;不过程序耗时较长 package com.example;/*** 计数器*/ class Counter {private st…...

提前进入行业顶尖阵营:高性能计算实习的竞争优势

如今就业越来越内卷&#xff0c;尤其是计算机行业更是如此。加上GPT以及大模型的加持&#xff0c;各大企业纷纷降本增效&#xff0c;普通程序员逐渐失去竞争力。想要在竞争激烈的就业市场中脱颖而出&#xff0c;提前进入行业顶尖阵营是一个明智的选择。而高性能计算实习将为您提…...

Java程序设计入门教程--标识符和关键字

目录 标识符 标识符的约定 标识符 1. 定义 用来标识类名&#xff0c;变量名&#xff0c;方法名&#xff0c;类型名&#xff0c;数组名&#xff0c;文件名的有效序列称为标识符。简单地说&#xff0c;标识符就是一个名字。 2. 标识符命名规则 &#xff08;1&#xff09;大小…...

国产IC芯片自动化测试系统ATECLOUD,助力芯片测试自动化

IC芯片测试成本是影响制造和加工成本的重要因素。在某些情况下&#xff0c;测试成本可能占到器件总成本的40%左右。为了降低测试成本&#xff0c;可以优化测试程序并研发多工位测试。同时&#xff0c;必须平衡良品率和测试时间&#xff0c;以实现最佳的成本控制。本篇文章纳米软…...

BeanFactory和ApplicationContext有什么区别?

BeanFactory和ApplicationContext有什么区别&#xff1f; BeanFactory和ApplicationContext有什么区别&#xff1f; BeanFactory和ApplicationContext有什么区别&#xff1f; BeanFactory (轻量级) 和ApplicationContext(高级特性和框架)是Spring的两大核心接口&#xff0c;都…...

js的BOM对象中的window、location使用

说明&#xff1a;BOM的全称是Browser Object Model&#xff0c;浏览器对象模型&#xff0c;有Window&#xff08;浏览器窗口&#xff09;、Navigator&#xff08;浏览器&#xff09;、Screen&#xff08;屏幕&#xff09;、History&#xff08;历史记录&#xff09;和Location&…...

DAY 68 redis高可用的主从复制、哨兵、cluster集群

Redis 高可用 什么是高可用 在web服务器中&#xff0c;高可用是指服务器可以正常访问的时间&#xff0c;衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。 但是在Redis语境中&#xff0c;高可用的含义似乎要宽泛一些&#xff0c;除了保证提供正常服…...

leetcode 1209 学会删除字符串

删除字符串的经典kotlin操作&#xff1a; val mTemp (temp.text).replace(Regex("℃"),"") 以下是题目&#xff01; 1209. 删除字符串中的所有相邻重复项 II 提示 中等 174 相关企业 给你一个字符串 s&#xff0c;「k 倍重复项删除操作」将会从 s…...

JavaScript6

一、概念 ES6是JavaScript语言的标准。 新特性&#xff1a;let和const命令、变量的解构赋值、字符串函数对象数组等扩展。 环境准备&#xff1a;需要安装NodeJs。 二、新特性 1、let let命令用来声明变量。他的用法类似var&#xff0c;但所声明的变量&#xff0c;只在let命令…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

云安全与网络安全:核心区别与协同作用解析

在数字化转型的浪潮中&#xff0c;云安全与网络安全作为信息安全的两大支柱&#xff0c;常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异&#xff0c;并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全&#xff1a;聚焦于保…...

Vue3中的computer和watch

computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...

JS红宝书笔记 - 3.3 变量

要定义变量&#xff0c;可以使用var操作符&#xff0c;后跟变量名 ES实现变量初始化&#xff0c;因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符&#xff0c;可以创建一个全局变量 如果需要定义…...

【若依】框架项目部署笔记

参考【SpringBoot】【Vue】项目部署_no main manifest attribute, in springboot-0.0.1-sn-CSDN博客 多一个redis安装 准备工作&#xff1a; 压缩包下载&#xff1a;http://download.redis.io/releases 1. 上传压缩包&#xff0c;并进入压缩包所在目录&#xff0c;解压到目标…...

Linux-进程间的通信

1、IPC&#xff1a; Inter Process Communication&#xff08;进程间通信&#xff09;&#xff1a; 由于每个进程在操作系统中有独立的地址空间&#xff0c;它们不能像线程那样直接访问彼此的内存&#xff0c;所以必须通过某种方式进行通信。 常见的 IPC 方式包括&#…...