【机器学习】训练集/验证集/测试集释疑

文章目录

      • 序言
      • 1. 训练集、验证集、测试集是什么
      • 2. 为什么需要验证集
      • 3. 验证集是必须的吗
      • 4. 验证集和测试集上的表现会不同吗
      • 5. 如何从Train/Test Set划分Validation Set
      • 6. 训练集、验证集和测试集的比例怎么设置
      • 7. 模型表现不好时测试集可以反复使用来调整模型吗
      • 8. 训练集、验证集和测试集的数据是否可以有所重合
      • 9. 常见的机器学习模型验证方法有哪些

序言

  • 关于数据集的一些疑问厘清

1. 训练集、验证集、测试集是什么

  • 训练集:Training Dataset. 用于训练和调整模型参数

    • 训练阶段
  • 验证集:Validation Dataset. 用于验证模型精度和调整模型超参数

    • 模型挑选阶段
    • 验证集的作用体现在训练的过程中
    • 比如:通过查看训练集和验证集的损失值随着epoch的变化关系可以看出模型是否过拟合,如果是可 以及时停止训练,然后根据情况调整模型结构和超参数,大大节省时间
  • 测试集:Test Dataset. 验证模型的泛化能力

    • 验证阶段
    • 测试集的作用体现在测试的过程中

2. 为什么需要验证集

  • 首先,划分训练集、验证集和测试集,能够避免信息泄漏
  • 模型的参数和超参,模型存在两个最优:训练集参数的最优 + 超参数的最优。如果没有验证集,假设训练好的模型在测试集上表现不好,将无法确认是模型参数过拟合/欠拟合,还是超参数设置不合理,所以需要验证集来选择超参数
  • 验证集和测试集一样,都是未知的,如果模型适用于验证集,那么也大概会适用于测试集

3. 验证集是必须的吗

  • 训练集是练习题 + 验证集是模拟题 + 测试集是考试题
  • 训练集:调试网络参数;验证集:没有参与网络参数更新
  • 没有超参数就不需要验证集。如果不需要调整超参和early stop,就不需要验证集,把验证集并入训练集即可,但是不需要超参的模型比较少见
  • 验证集是用来选取最优超参数的
  • 在实际应用中,有可能不继续划分验证集和测试集,就相当于假设验证集和测试集分布高度相似,依次来验证开发算法的泛化性能

4. 验证集和测试集上的表现会不同吗

  • 会不会出现调优后的超参数在验证集上优秀,但在测试集上却表现不如模型超参数?
  • 一般不会,除非验证集和测试集的数据分布有明显不同

5. 如何从Train/Test Set划分Validation Set

  • 从training set中拿出一部分作为validation set,最好让validation set和test set的大小和数据分布接近。如下

6. 训练集、验证集和测试集的比例怎么设置

  • 如果有惯例,按照惯例
  • 没有的话,可以是10:1,8:2,7:3,6:4等。传统上是6:2:2,即训练集:验证集:测试集 = 6:2:2是可以的
  • 如果不需要验证集,训练集:测试集 = 8:2或7:3
  • 网上还看到两种划分比例:
    • 训练集:验证集:测试集 = 8:0.5:1.5
    • 训练集:验证集:测试集 = 7:1:2
  • 数据集划分没有明确规定,但可以参考以下原则
    • 对于小规模样本集(几万量级),常用的分配比例是 60% 训练集、20% 验证集、20% 测试集
    • 对于大规模样本集(百万级以上),只要验证集和测试集的数量足够即可。例如有 100w 条数据,那么留 1w 验证集,1w 测试集即可。1000w 的数据,同样留 1w 验证集和 1w 测试集
    • 超参数越少,或者超参数很容易调整,那么可以减少验证集的比例,更多的分配给训练集

7. 模型表现不好时测试集可以反复使用来调整模型吗

  • 如果只是调整超参数,那么重复使用测试集属于作弊
  • 如果不光调整超参、还对模型设计、训练方法做改进,可以重复使用

8. 训练集、验证集和测试集的数据是否可以有所重合

  • 数据少,又不想使用数据增强,可以使用交叉验证的方法
  • 但各数据集的数据肯定都是划分清楚的

9. 常见的机器学习模型验证方法有哪些

  • (1)留出法

    • 按照固定比例将数据集固定的划分为训练集、验证集、测试集
  • (2)k折交叉验证

    • 留出法对数据的静态划分可能得到不同的模型;k折交叉验证是一种动态验证的方法,可以降低数据划分带来的影响
    • 步骤:
      • 1)将数据集分为训练集和测试集,将测试集放在一边
      • 2)将训练集分为 k 份
      • 3)每次使用 k 份中的 1 份作为验证集,其他全部作为训练集
      • 4)通过 k 次训练后,我们得到了 k 个不同的模型
      • 5)评估 k 个模型的效果,从中挑选效果最好的超参数
      • 6)使用最优的超参数,然后将 k 份数据全部作为训练集重新训练模型,得到最终模型
      • 7)还有一种说法是,将k次loss的平均作为性能度量得到最终模型,如下图
  • (3)留一法

    • 是k折交叉法的一个变种,将k定义为n(n为样本数)
    • 一般在数据缺乏时使用,即适合于小样本的情况,优点是样本利用率高,缺点是计算繁琐
    • 每次的测试集都只有一个样本,要进行 n 次训练和预测
    • 这个方法用于训练的数据只比整体数据集少了一个样本,因此最接近原始样本的分布。但是训练复杂度增加了,因为模型的数量与原始数据样本数量相同
  • (4)自助法

    • 自助法以有放回/自助采样为基础
    • 每次随机从 D D D(样本数为m)中挑选一个样本,放入 D ′ D' D中,然后将样本放回D中,重复m次之后,得到了包含m个样本的数据集 D ′ D' D
    • 样本在m次采样中始终不被采到的概率是
      ( 1 − 1 m ) m (1-\frac{1}{m} )^{m} (1m1)m
    • 取极限得到
      lim ⁡ m → ∞ ( 1 − 1 m ) m = 1 e = 0.368 \lim_{m \to \infty} (1-\frac{1}{m} )^{m} =\frac{1}{e} =0.368 mlim(1m1)m=e1=0.368
    • 即D约有 36.8 % 36.8\% 36.8%的样本未出现在 D ′ D′ D中。于是将 D ′ D′ D用作训练集, D D D\ D ′ D′ D剩下的用作测试集
    • 这样,仍然使用m个训练样本,但约有1/3未出现在训练集中的样本被用作测试集
    • 这种方法优点是自助法在数据集较小、难以有效划分训练/测试集时很有用;自助法改变了初始数据集的分布,这会引入估计偏差

 


 
如有帮助,请点赞收藏支持
 


【参考文章】
训练集验证集测试集
训练集验证集测试集的通俗解释
能不能不要验证集
验证集和测试集有什么区别
常用的交叉验证技术
机器学习的验证方法
模型评估方法

created by shuaixio, 2023.09.30

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

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

相关文章

【C++】AVL树 红黑树

AVL树 AVL树也是二叉搜索树的一种。因为对于普通的二叉搜索树,当插入的数据在有序或接近有序的情况下,二叉搜索树很可能退化成单支树,导致查找效率低下。而AVL树就很好的解决了这个问题。 首先,AVL树是一棵二叉搜索树。同时对于A…

在Ubuntu上通过Portainer部署微服务项目

这篇文章主要记录自己在ubuntu上部署自己的微服务应用的过程,文章中使用了docker、docker-compose和portainer,在部署过程中遇到了不少问题,因为博主也是初学docker-compose,通过这次部署实战确实有所收获,在这篇文章一…

全志ARM926 Melis2.0系统的开发指引⑦

全志ARM926 Melis2.0系统的开发指引⑦ 编写目的11. 调屏11.1. 调屏步骤简介11.1.1. 判断屏接口。11.1.2. 确定硬件连接。11.1.3. 配置显示部分 sys_config.fex11.1.3.1. 配置屏相关 IO 11.1.4. Lcd_panel_cfg.c 初始化文件中配置屏参数11.1.4.1. LCD_cfg_panel_info11.1.4.2. L…

ili9431液晶 tft_espi图形库演示 时钟、天气、滚动、气象图标

米思齐tft_spi模块库演示程序。心知天气、阿里云时钟、WiFi信号强度检测、1分钟滚屏、更新天气时间为15分钟、加入天气图标。更新天气次数。断网检测 。此程序为tft_eSPI图形库演示、如感觉好可以自行优化。 ili9431tft_espi库是用于ESP32和ESP8266芯片的TFT LCD驱动程序库&am…

2023版 STM32实战6 输出比较(PWM)包含F407/F103方式

输出比较简介和特性 -1-只有通用/高级定时器才能输出PWM -2-占空比就是高电平所占的比例 -3-输出比较就是输出不同占空比的信号 工作方式说明 -1-1- PWM工作模式 -1-2- 有效/无效电平 有效电平可以设置为高或低电平,是自己配置的 周期选择与计算 周期重…

安卓教材学习

文章目录 教材学习第一行代码 Android 第3版环境配置gradle配置下载包出现问题 教材学习 摘要:选了几本教材《第一行代码 Android 第3版》,记录一下跑案例遇到的问题,和总结一些内容。 第一行代码 Android 第3版 环境配置 gradle配置 gradl…

UGUI交互组件Toggle

一.Toggle对象的构造 Toggle和Button类似,是交互组件的一种 如果所示,通过菜单创建了两个Toggle,Toggle2中更换了背景和标记资源 对象说明Toggle含有Toggle组件的对象Background开关背景Checkmark开关选中标记Label名称文本 二.Toggle组件属…

力扣 -- 377. 组合总和 Ⅳ

解题步骤&#xff1a; 参考代码&#xff1a; class Solution { public:int combinationSum4(vector<int>& nums, int target) {int nnums.size();vector<double> dp(target1);//初始化dp[0]1;//填表for(int i1;i<target;i){for(int j0;j<n;j){//填表if(…

解密京东面试:如何应对Redis缓存穿透?

亲爱的小伙伴们&#xff0c;大家好&#xff01;欢迎来到小米的微信公众号&#xff0c;今天我们要探讨一个在面试中可能会遇到的热门话题——Redis缓存穿透以及如何解决它。这个话题对于那些渴望进入技术领域的小伙伴们来说&#xff0c;可是必备的哦&#xff01; 认识Redis缓存…

C++设计模式-原型(Prototype)

目录 C设计模式-原型&#xff08;Prototype&#xff09; 一、意图 二、适用性 三、结构 四、参与者 五、代码 C设计模式-原型&#xff08;Prototype&#xff09; 一、意图 用原型实例指定创建对象的种类&#xff0c;并且通过拷贝这些原型创建新的对象。 二、适用性 当…

springmvc中DispatcherServlet关键对象

以下代码为 spring boot 2.7.15 中自带的 spring 5.3.29 RequestMappingInfo 请求方法相关信息封装&#xff0c;对应的信息解析在 RequestMappingHandlerMapping 的 createRequestMappingInfo() 中实现。 对于 RequestMapping 赋值的相关信息进行解析 protected RequestMappi…

网课搜题 小猿题库多接口微信小程序源码 自带流量主

多接口小猿题库等综合网课搜题微信小程序源码带流量主&#xff0c;网课搜题小程序, 可以开通流量主赚钱 搭建教程1, 微信公众平台注册自己的小程序2, 下载微信开发者工具和小程序的源码3, 上传代码到自己的小程序 源码下载&#xff1a;https://download.csdn.net/download/m0_…

set和map的封装

目录 介绍 红黑树代码 set insert的迭代器转换问题 为什么会有这样的问题? 如何解决 代码 map 注意点 代码 介绍 set和map的底层都是红黑树,所以我们可以在自己实现的红黑树(简易版)的基础上,进行封装,成为简易的set和map 红黑树代码 #pragma once#include <…

力扣 -- 873. 最长的斐波那契子序列的长度

解题步骤&#xff1a; 参考代码&#xff1a; class Solution { public:int lenLongestFibSubseq(vector<int>& nums) {int nnums.size();unordered_map<int,int> hash;for(int i0;i<n;i){hash[nums[i]]i;}int ret2;vector<vector<int>> dp(n,v…

beego-简单项目写法--路径已经放进去了

Beego案例-新闻发布系统 1.注册 后台代码和昨天案例代码一致。,所以这里面只写一个注册的业务流程图。 **业务流程图 ** 2.登陆 业务流程图 登陆和注册业务和我们昨天登陆和注册基本一样&#xff0c;所以就不再重复写这个代码 但是我们遇到的问题是如何做代码的迁移&…

Vue中如何进行移动端手势操作

当开发移动端应用程序时&#xff0c;手势操作是提高用户体验的关键部分之一。Vue.js是一个流行的JavaScript框架&#xff0c;它提供了一种简单而强大的方式来实现移动端手势操作。本文将介绍如何在Vue.js中进行移动端手势操作&#xff0c;包括基本手势&#xff0c;如点击、滑动…

nodejs+vue中医体质的社区居民健康管理系统elementui

可以实现首页、中医体质量表、健康文章、健康视频、我的等&#xff0c;在我的页面可以对医生、小区单元、医疗药品等功能进行操作。目前主要的健康管理系统是以西医为主&#xff0c;而为了传扬中医文化&#xff0c;提高全民健康意识&#xff0c;解决人民日益增长的美好生活需要…

NPDP产品经理知识(产品创新流程)

1.复习组合管理: 组合管理的目标 ===> 价值最大化,项目平衡,战略一致,管道平衡(资源需求和供给),盈利充分 (实现财务目标) 产品创新流程就是管理风险的过程。 模糊前端: 产品创新章程:PIC 包含 =====> 背景,聚焦舞台,目标和目的,特别准则,可持续性 新产…

复习 --- 消息队列

进程间通信机制(IPC) 简述 IPC&#xff1a;Inter Process Communication 进程和进程之间的用户空间相互独立&#xff0c;但是4G内核空间共享&#xff0c;进程间的通信就是通过这4G的内核空间 分类 传统的进程间通信机制 无名管道&#xff08;pipe&#xff09; 有名管道&…

归并排序含非递归版

目录 1.归并排序的原理 2.实现归并排序 2.1框架 2.2区间问题和后序遍历 2.3归并并拷贝 2.4归并排序代码 2.5测试 3.非递归实现归并排序 3.1初次实现 3.2测试 3.3修改 3.4修改测试 1.归并排序的原理 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治…