深度学习中的McNemar检验 📅 发布时间:2026/7/8 2:45:48 👁️ 浏览次数: 在深度学习模型中McNemar检验(McNemars Test麦克尼马尔检验)是检验不同的深度学习分类器模型(准确率)或回归模型(命中率)在相同测试数据上性能是否存在显著差异的统计检验方法。McNemar检验基于两个模型预测结果的2x2列联表(contingency table)如下图所示1. 列联表是对两个分类或回归变量进行列表或计数。列联表的依据是两个分类模型或回归模型均使用完全相同的训练数据进行训练并使用完全相同的测试数据进行评估。2.McNemar检验仅关注两个条件存在差异的单元格McNemar仅关心n01和n10。n00模型A和模型B均未命中的样本数。n11模型A和模型B均命中的样本数。n01模型A未命中但模型B命中的样本数。n10模型A命中但模型B未命中的样本数。3. 判断逻辑如果n01约等于n10两模型差异可能是随机的。如果n01 n10模型B显著优于模型A。如果n01 n10模型A显著优于模型B。4. 卡方分布表(chi-square distribution table)如下图所示5. 公式推荐使用连续性校正(1).原始公式(未校正)10 n01 n10 25服从自由度df1(或χ²(1))的卡方分布(2).连续性校正(Yates)公式n01 n10 25服从自由度df1(或χ²(1))的卡方分布(3).精确检验n01 n10 10scipy.stats.binomtest6. 判断标准计算pvalue得结论:(1).pvalue 0.05两个模型有显著差异。(2).pvalue 0.05两个模型差异不显著。以下测试代码是用McNemar检验两个回归模型是否有显著差异def parse_args(): parser argparse.ArgumentParser(descriptionmcnemar test) parser.add_argument(--src_file, requiredTrue, typestr, helpsrc file name) parser.add_argument(--src_file2, requiredTrue, typestr, helpsrc file name) parser.add_argument(--threshold, typefloat, default0.5, helperror margin) args parser.parse_args() return args def mcnemar_test(src_file, src_file2, threshold): if src_file is None or not src_file or not Path(src_file).is_file(): raise ValueError(colorama.Fore.RED f{src_file} is not a file) if src_file2 is None or not src_file2 or not Path(src_file2).is_file(): raise ValueError(colorama.Fore.RED f{src_file2} is not a file) def parse_csv(file): with open(file, r, encodingutf-8) as f: reader csv.reader(f) all_rows list(reader) data all_rows[1:-1] # remove the first and last rows return data data1 parse_csv(src_file) data2 parse_csv(src_file2) if len(data1) ! len(data2): raise ValueError(colorama.Fore.RED flength mismath: {src_file}:{len(data1)}, {src_file2}:{len(data2)}) print(fnumber of data rows: {len(data1)}) is_same all(row1[0] row2[0] for row1, row2 in zip(data1, data2)) if not is_same: raise ValueError(colorama.Fore.RED fimage name mismatch: {src_file}, {src_file2}) n11 0; n10 0; n01 0; n00 0 for i in range(len(data1)): value1 abs(float(data1[i][1]) - float(data1[i][2])) value2 abs(float(data2[i][1]) - float(data2[i][2])) if value1 threshold and value2 threshold: n11 1 elif value1 threshold and value2 threshold: n00 1 elif value1 threshold and value2 threshold: n10 1 elif value1 threshold and value2 threshold: n01 1 else: raise ValueError(colorama.Fore.RED funsupported conditions: value: {value1}, {value2}) print(fn11: {n11}; n10: {n10}; n01: {n01}; n00: {n00}) if n10 n01 0: print(colorama.Fore.YELLOW unable to test differences) return def calculate_pvalue(n10, n01, method): # method: 0:Yates; 1:original; 2:exact binomial test if method 0: stat (abs(n01 - n10) - 1) ** 2 / (n10 n01) return chi2.sf(stat, df1) elif method 1: stat (n01 - n10) ** 2 / (n10 n01) return chi2.sf(stat, df1) else: return binomtest(kmin(n10, n01), nn10n01, p0.5, alternativetwo-sided).pvalue if n10 n01 25: pvalue calculate_pvalue(n10, n01, 0) elif 10 n10 n01 25: pvalue calculate_pvalue(n10, n01, 1) else: pvalue calculate_pvalue(n10, n01, 2) if pvalue 0.05: print(colorama.Fore.GREEN fpvalue: {pvalue:.4f}, the two models show a significant difference) else: print(colorama.Fore.YELLOW fpvalue: {pvalue:.4f}, the two models no not show a significant difference) if __name__ __main__: colorama.init(autoresetTrue) args parse_args() mcnemar_test(args.src_file, args.src_file2, args.threshold) print(colorama.Fore.GREEN execution completed )执行结果如下图所示GitHubhttps://github.com/fengbingchun/NN_Test
某多多anti-content参数 个人思路仅供参考: 这里是跟着趴菜哥的视频进行实战操作的大家可以去小破站搜:小爬菜咦 这个是他的主页:https://space.bilibili.com/3546924980373556?spm_id_from333.1387.follow.user_card.click 该文章仅供学习参考,不接受商用价值---如有侵权,联… 2026/5/17 3:19:07
通义千问3-VL-Reranker-8B多模态重排原理:VL架构设计与训练逻辑解析 通义千问3-VL-Reranker-8B多模态重排原理:VL架构设计与训练逻辑解析 你是不是经常遇到这样的问题:在网上搜索“一只猫在沙发上睡觉”,结果搜出来的图片五花八门,有狗在沙发上、猫在窗台上,甚至还有完全无关的商品图&a… 2026/5/17 3:19:05
PETRV2-BEV训练实战案例:中小企业低成本GPU算力训练BEV感知模型落地方案 PETRV2-BEV训练实战案例:中小企业低成本GPU算力训练BEV感知模型落地方案 在智能驾驶和自动驾驶感知领域,BEV(Birds Eye View)视角建模正成为主流技术路径。相比传统前视单目方案,BEV能天然融合多相机输入,… 2026/5/17 3:19:05
云教务如何设计线上教学机构对接classin及多校区管理 【今日个性改造方案分享】 划分多层级校区管理架构,与ClassIn、腾讯会议、Zoom、Teams平台的链路打通,支持纯线上教学机构、单校(或多校)区面授与线上课混合教学机构;区分各校区独立数据边界. 各校区可自主完成自身授课… 2026/7/8 2:43:32
hw-buaa-lab贡献指南:三步教你成为开源项目参与者 hw-buaa-lab贡献指南:三步教你成为开源项目参与者 【免费下载链接】hw-buaa-lab This reposiroty will provide the content of Huawei BUAA Joint Laboratory. 项目地址: https://gitcode.com/openeuler/hw-buaa-lab 前往项目官网免费下载:https… 2026/7/8 2:41:32
2026百度网盘不限速新版工具评测:速度直飙80MB/s,到底是不是噱头? 说实话,作为一名整天和服务器、代码打交道的后端开发,私底下我也是个不折不扣的数字囤积控,手头攒了差不多好几十个 T 的各种技术资料和媒体资源。经常有同行在社区里跟我吐槽,说现在用大厂的客户端同步数据,那速度慢得… 2026/7/8 2:41:32
2026降AI率工具红黑榜:降AIGC平台怎么选?实测才敢推! 千笔AI、ThouPen、豆包位列红榜,适配国内高校AI率检测规范,效果稳定;黑榜需避开低质免费工具、无正规检测对接、改写痕迹生硬的平台;选择时应优先匹配三维模型:降AI效果 - 学术合规性 - 使用成本。 一、红榜࿱… 2026/7/8 2:39:29
# QNX JSON 库参考 概述 libjson 库允许应用程序解码和编码 JSON 数据,用于读取和解释复杂数据或在系统之间传输数据。 库提供三大功能领域: 解码器 (Decoder):读取 JSON 数据,导航对象和数组,读取和获取各个值的元数据编码器 (Encode… 2026/7/8 2:39:29
Java Lambda 类型安全查询是怎么实现的?从字节码层面拆一遍 你可能写过 wrapper.eq(User::getName, "tom") 这种代码,但你有没有想过:一个方法引用,是怎么变成 SQL 里的列名的?今天从 JVM 层面拆到底。 一、字符串列名到底有什么问题 大部分 Java 数据库框架的条件构造器&#x… 2026/7/8 2:37:28
BetterNCM安装器:高效管理网易云插件的最佳选择 BetterNCM安装器:高效管理网易云插件的最佳选择 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 还在为网易云音乐插件的繁琐安装流程而烦恼吗?BetterNCM安装器是… 2026/7/8 0:02:48
运动控制系统安全设置对比:ECI3808的3种限位保护与急停逻辑实现 运动控制系统安全机制深度解析:限位保护与急停逻辑的设计哲学在精密制造与自动化领域,运动控制系统的安全设计绝非简单的功能堆砌,而是一套融合了机械工程、电气原理和软件算法的防御体系。当一台数控机床以每分钟数万转的速度运转࿰… 2026/7/8 0:06:48
AI大模型应用开发:小白也能抓住的红利风口,收藏这篇入门指南! 文章指出,虽然微软等科技巨头在裁员,但英伟达等公司却在积极扩招AI相关人才,尤其是具身智能、仿真等领域。AI行业正在经历结构性调整,传统岗位被淘汰,而大模型应用开发等新岗位需求旺盛。对于想转行或学习AI的普通人来… 2026/7/8 0:10:49
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/7 11:26:57
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/7 11:26:57
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/7 11:26:58