1. 机器学习基本知识(4)——机器学习测试和验证

1.6 测试和验证

了解模型对新实例的泛化能力的唯一方法是在新实例上进行实际尝试。

一种方法是将模型部署到生产环境并监控其性能。

​ 这种方法很有效,但如果模型非常糟糕,你的用户就会抱怨,所以这显然不是最好的方法。

更好的选择是将数据分成两组:训练集和测试集。

​ 使用训练集训练模型,并使用测试集对其进行测试。

  • 泛化误差(或样本外误差):新实例的错误率称为泛化误差(或样本外误差),通过在测试集上评估模型,你可以获得误差的估计值。这个值能告诉你模型在处理以前从未见过的实例时的表现。

如果训练误差很低(即模型在训练集上犯的错误很少)但是泛化误差很高,这意味着模型过拟合训练数据。

通常使用80%的数据进行训练,保留20%的数据进行测试。

然而,这取决于数据集的大小:如果它包含1000万个实例,那么保留1%意味着你的测试集将包含10万个实例,这可能足以很好地估计泛化误差。

1.6.1 超参数调整和模型选择

模型选择与模型评估:如果在两个模型之间择优,可以同时训练这两个模型,使用测试集比较它们的泛化能力,从而能对两个模型进行评估。(评估方法就是使用测试集进行测试)

问题提出:过度拟合测试集导致不适应新数据:针对测试集不断调整超参数来训练模型,找到最佳超参数使得泛化误差最小,这样的模型是拟合该测试集的最佳模型,但是部署在实际环境中的性能将会降低,在新数据中的表现未必更好。

解决方案:保持验证:保持训练集的一部分,以评估几个候选模型并选择最佳模型。新的保留集称为验证集(或开发集)。

更具体地说,你可以在简化的训练集(即完整训练集减去验证集)上训练具有各种超参数的多个模型,然后选择在验证集上表现最佳的模型。

在此保持验证过程之后,你在完整训练集(包括验证集)上训练最佳模型,这就是你的最终模型。最后,你在测试集上评估这个最终模型以获得泛化误差的估计。

image-20241210165351949

  • 如果验证集太小,则模型评估就不精确,你最终可能会错误地选择一个次优模型。

  • 相反,如果验证集太大,那么剩余的训练集会比完整的训练集小得多。

    为什么这样不好?好吧,由于最终模型是在完整的训练集上进行训练,因此在小得多的训练集上训练的候选模型并不理想。这就像选择最快的短跑运动员去参加马拉松比赛。

    解决这个问题的一种方法是使用许多小的验证集执行重复的交叉验证。每个模型在对其余数据进行训练后,每个验证集都会评估一次。通过对模型的所有评估求平均,可以更准确地衡量其性能。

    然而,有一个缺点:训练时间是验证集数量的倍数。

1.6.2 数据不匹配

训练集与实际生产环境中的数据不匹配

解决方案:

​ 将常规的训练集(称为集合A)拆成训练集(称为集合B)和train-dev(训练开发)集(称为集合C)两部分,在集合B上完成模型训练,然后在集合C上进行模型评估:

  • 在集合C上模型表现不佳:对集合B过拟合,应该尽量简化/正则化该模型、获取更多的训练数据、清洗训练数据
  • 在集合C上模型表现良好:接下来在开发集上进行评估:
    • 开发集上表现不佳:那么问题一定来自数据不匹配。你可以尝试通过预处理网络图片来解决这个问题,使它们看起来更像来自实际生产环境的图片,然后重新训练模型
    • 开发集上表现良好:那么便拥有了在train-dev集和开发集上都表现良好的模型,可以在测试集上最后一次评估它,以了解它在生产环境中的表现。

image-20241211184126187

🚓混淆辨析

至此,相信有人已经对训练集、训练开发集、开发集、测试集、验证集的概念混淆了,我们再来区分一下,辨析和总结一下他们的异同:

在机器学习和统计建模中,数据集通常被分为几个不同的部分,以便在模型训练和评估过程中使用。以下是这些术语的定义和区分:

  1. 训练集(Training Set)

    • 这是用于训练模型的数据集。模型通过这个数据集学习规律和模式,以便能够对新的、未见过的数据做出预测或分类。
    • 训练集是模型学习的基础,其质量直接影响模型的性能。
  2. 训练开发集(Training Development Set)

    • 这个术语不常用,但可以理解为训练集的一个子集,用于在训练过程中进行模型的调整和优化。它可能用于早期停止(early stopping)或超参数调整,以防止模型在训练集上过拟合。
    • 训练开发集帮助模型开发者监控训练过程中的性能,以便及时调整模型。
  3. 开发集(Development Set)/验证集(Validation Set)

    • 这两个术语经常可以互换使用,但有时有细微的差别。开发集/验证集用于在模型训练过程中评估模型的性能,但不参与模型的训练。
    • 开发集/验证集的主要目的是评估模型的泛化能力,即模型在未见过的数据上的表现如何。
    • 在某些情况下,开发集可能用于模型选择(如选择不同的模型架构)和超参数调整,而验证集用于最终评估模型的性能。
  4. 测试集(Test Set)

    • 测试集是完全独立的数据集,用于最终评估模型的性能。模型在训练和开发/验证阶段从未见过测试集的数据。
    • 测试集提供了模型在实际应用中可能遇到的数据上的一个无偏估计。
    • 测试集的结果通常用于最终报告模型的性能,如准确率、召回率等指标。

区分这些数据集的关键是它们在模型开发和评估过程中的不同用途。训练集用于训练模型,开发集/验证集用于模型选择和超参数调整,测试集用于最终评估模型的性能。正确的数据集划分对于确保模型的泛化能力和避免过拟合至关重要。

🌭没有免费的午餐定理

在1996年的一篇著名论文(https://homl.info/8)中,David Wolpert证明,如果你完全不对数据做出任何假设,那么就没有理由偏爱某个模型。这被称为没有免费的午餐(No Free Lunch,NFL)定理。

对于一些数据集,最好的模型是线性模型,而对于其他数据集,最好的模型是神经网络模型。不存在一个先验模型可以保证一定能更好地工作(这是定理名称的由来)。

确定哪种模型最好的唯一方法是对所有模型进行评估。由于这是不可能的,因此在实践中你对数据做出了一些合理的假设并仅评估了几个合理的模型。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qwen 论文阅读记录

本文仅作自己初步熟悉大模型,梳理之用,慢慢会更改/增加/删除,部分细节尚未解释,希望不断学习之后,能够完善补充。若有同道之人,欢迎指正探讨。 关于后面的code-qwen and math-qwen,我个人认为依…

yarn 安装问题

Couldn’t find package “regenerator-runtime” on the “npm” registry. Error: Couldn’t find package “watch-size” on the “npm” regist 标题Error: Couldn’t find package “babel-helper-vue-jsx-merge-props” on the “npm” registry. Error: Couldn’t f…

【开源】基于SpringBoot框架的音乐网站与分享平台(计算机毕业设计)+万字说明文档 T011

系统合集跳转 源码获取链接 一、系统环境 运行环境: 最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 IDE环境: Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以 tomcat环境: Tomcat 7.x,8.x,9.x版本均可 操作系统…

【SpringMVC】应用分层

阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 一:场景引入 二:前后端分离三层架构 1:表现层 2:业务…

防火墙旁挂部署+故障切换

一、实验环境 华为ENSP 二、拓扑 三、目的 1、内网PC1访问Server 2、防火墙旁挂部署,对流量进行过滤,防火墙挂掉之后,内网PC1能继续访问到Server 3、防火墙恢复正常后,流量能回切至防火墙转发 四、思路: 1、AR1…

MySQL8版本升级

1.官方升级手册必看 1.1 理解升级过程会做什么 手册网址:https://dev.mysql.com/doc/refman/8.0/en/upgrading.html 升级mysql 系统数据库(默认的库),升级mysql 用户数据库(用户创建的库) 升级步骤分为…

5G中的随机接入过程可以不用收RAR?

有朋友提到了一种不用接收RAR的RA过程,问这个是怎么回事。其实在刚刚写过的LTM cell switch篇章中就有提到,这里把所有相关的内容整理如下。 在RACH-less LTM场景,在进行LTM cell switch之前就要先知道target cell的TA信息,进而才…

QT数据库SQLite:QsqlTableModel使用总结

数据库连接、数据模型与界面组件所涉及的类之间的关系如下所示: 数据库类 QSqlDatabase 类用于建立与数据库的连接,QSqlDatabase 对象就表示这种连接。QSqlDatabase 类的功能主要分为三大部分: 1、创建数据库连接,即创建 QSqlDat…

C++求20亿内质数的合数“哥德巴赫猜想”

数学领域著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和。比如:24519,其中5和19都是素数。本实验的任务是设计一个程序,验证20亿以内的偶数都可以分解成两个素数之和。 输入格式: 输入…

物品识别 树莓派 5 YOLO v5 v8 v10 11 计算机视觉

0. 要实现的效果 让树莓派可以识别身边的一些物品,比如电脑,鼠标,键盘,杯子,行李箱,双肩包,床,椅子等 1. 硬件设备 树莓派 5 raspberrypi.com/products/raspberry-pi-5/树莓派官方摄…

模型训练数据-MinerU一款Pdf转Markdown软件

模型训练数据-MinerU一款Pdf转Markdown软件-说明 简介: MinerU是什么 MinerU是上海人工智能实验室OpenDataLab团队推出的开源智能数据提取工具,专注于复杂PDF文档的高效解析与提取。MinerU能将包含图片、公式、表格等元素的多模态PDF文档转化为易于分析…

51c深度学习~合集9

我自己的原文哦~ https://blog.51cto.com/whaosoft/12750420 #傅里叶特征 (Fourier Feature)与核回归 位置编码背后的理论解释 本文探讨了位置编码背后的理论基础,特别是傅里叶特征(Fourier Feature)与核回归(Kern…

数据仓库工具箱—读书笔记01(数据仓库、商业智能及维度建模初步)

数据仓库、商业智能及维度建模初步 记录一下读《数据仓库工具箱》时的思考,摘录一些书中关于维度建模比较重要的思想与大家分享🤣🤣🤣 博主在这里先把这本书"变薄"~有时间的小伙伴可以亲自再读一读,感受一下…

【JVM】JVM基础教程(三)

上一章:【JVM】JVM基础教程(二)-CSDN博客 目录 运行时数据区 应用场景 程序计数器 程序计数器在运行时会出现内存溢出吗? 栈 IDEA的debug工具查看栈帧的内容 栈帧的组成 局部变量表 关于 this 的内存存储 操作数栈 帧…

如何编译安装系统settings设置应用(5.0.0-Release)

本文介绍如何在OpenHarmony 5.0.0 r版本中修改系统设置应用,并且编译安装到开发板上 开发环境 1.dayu200开发板 2.OpenHarmony 5.0.0r 固件 3.API12 full sdk (如果安装full sdk过程中出现报错hvigor ERROR: Cannot find module typescript,请参考 h…

【Unity】Amplify Shader Editor

Amplify Shader Editor (ASE) Amplify Shader Editor,是一个功能强大的基于节点的着色器开发工具,允许开发者在 Unity 中轻松创建和管理复杂的 Shader。 主要功能和特点 基于节点的编辑器: • 提供直观的可视化界面,减少手写 Sh…

Github2024-12-10 Python开源项目日报 Top10

根据Github Trendings的统计,今日(2024-12-10统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目10HTML项目1Rust项目1系统设计指南 创建周期:2507 天开发语言:Python协议类型:OtherStar数量:241693 个Fork数量:42010 次关注人…

1.2.3计算机软件

一个完整的计算机系统由硬件和软件组成,用户使用软件,而软件运行在硬件之上,软件进一步的划分为两类:应用软件和系统软件。普通用户通常只会跟应用软件打交道。应用软件是为了解决用户的某种特定的需求而研发出来的。除了每个人都…

ElementEye,网页分析器

介绍 我们经常使用Python写爬虫,爬到网页数据之后,就需要用beautifulSoup进行解析。因为写爬虫并不是我的主营工作,大多数只是用来分析一下想要的数据而已,所以经常会忘记beautifulSoup的用法。 同时,我们总是分析页面…

Qt 联合Halcon配置

文章目录 配置代码窗口绑定 配置 选择添加库 选择外部库 LIBS -LC:/Program Files/MVTec/HALCON-17.12-Progress/lib/x64-win64/ LIBS -lhalconcpp\-lhdevenginecpp\-lhalconINCLUDEPATH C:/Program Files/MVTec/HALCON-17.12-Progress/include DEPENDPATH C:/Program Fil…