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

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

文章目录

      • 序言
      • 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

相关文章:

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

文章目录 序言1. 训练集、验证集、测试集是什么2. 为什么需要验证集3. 验证集是必须的吗4. 验证集和测试集上的表现会不同吗5. 如何从Train/Test Set划分Validation Set6. 训练集、验证集和测试集的比例怎么设置7. 模型表现不好时测试集可以反复使用来调整模型吗8. 训练集、验证…...

LCR 120.寻找文件副本

​题目来源: leetcode题目,网址:LCR 120. 寻找文件副本 - 力扣(LeetCode) 解题思路: 使用哈希集合判断是否有元素重复出现即可。 解题代码: class Solution {public int findRepeatDocument(…...

代码随想录算法训练营第44天|动态规划:完全背包理论基础、518.零钱兑换II、377. 组合总和 Ⅳ

动态规划&#xff1a;完全背包理论基础 518.零钱兑换II https://leetcode.cn/problems/coin-change-ii/ 用一个二维dp数组 class Solution { public:int change(int amount, vector<int>& coins) {vector<vector<int>> dp(coins.size(), vector<i…...

309.买卖股票的最佳时机含冷冻期【Java】

309. 买卖股票的最佳时机含冷冻期 - 力扣&#xff08;LeetCode&#xff09; 给定一个整数数组prices&#xff0c;其中第 prices[i] 表示第 i 天的股票价格 。​ 设计一个算法计算出最大利润。在满足以下约束条件下&#xff0c;你可以尽可能地完成更多的交易&#xff08;多次…...

React Promise 中断

需求&#xff1a; 上传文件&#xff0c;但是后端接口不支持多文件上传&#xff0c;但是一次性发出很多请求的话如果有100个文件那对后端的压力又太大了在上传的时候还需要有停止上传的按钮 进程&#xff1a; async await 只能做到第一步&#xff0c;但是无法在上传中的时候关…...

1.填空题 进制转换Oct.2023

原题 部分可能会有用处的知识&#xff1a; p p p进制转十进制&#xff1a; 假设有一个 p p p进制数&#xff0c;个位是 a 0 a_0 a0​&#xff0c;向高位依次是 a 1 , a 2 , . . . , a n a_1,a_2,...,a_n a1​,a2​,...,an​&#xff0c;向低位依次是 b 1 , b 2 , b 3 , . . . …...

node 解决多版本配置 error:03000086:digital 引起的问题 已解决

在日常后端工作中&#xff0c;难免会安装前端的项目&#xff0c;今天有旧项目需要维护&#xff0c;但是 提示 node版本过高&#xff0c;或者不是长维护版本&#xff0c;部分分享说&#xff0c;加 opensll 过滤能解决&#xff0c;但是 还是不行&#xff0c;索性来这个 底朝天的找…...

前端面试题: js中对比两个对象的值是否相等? for..in 和 for...of的区别?

我去面试的时候会问这个问题&#xff0c; 而且发现不管是初级还是工作一段时间的小伙伴 都会说的不是很清晰 比如第一道题哈&#xff1a; 首先大部分人都会想起来 我们用JSON.stringify() 进行转换&#xff0c;查看两个是否相等 你敢说我下面的对象 值不是想等的吗。 但是你用…...

第十七章:Java连接数据库jdbc(java和myql数据库连接)

1.进入命令行&#xff1a;输入cmd&#xff0c;以管理员身份运行 windowsr 2.登录mysql 3.创建库和表 4.使用Java命令查询数据库操作 添加包 导入包的快捷键 选择第四个 找到包的位置 导入成功 创建java项目 二&#xff1a;连接数据库&#xff1a; 第一步&#xff1a;注册驱动…...

Unity基于种子与地块概率的开放世界2D地图生成

public class BuildingGen : MonoBehaviour {public int[] Building;//存储要生成的地块代码public int[] Probability;//存储概率public double seed;public int width 100;public int height 100;public float noiseScale 0.1f; //噪声缩放倍数private int[,] frequencyM…...

5.Vectors Transformation Rules

在上节&#xff0c;有个问题&#xff1a;向量分量的转换方式 与 新旧基底的转换方式相反 用例子来感受一下&#xff0c; 空间中一向量V&#xff0c;即该空间的一个基底&#xff1a;e1、e2 v e1 e2 现把基底 e1 、 e2 放大两倍。变成 基向量放大了两倍&#xff0c; 但对于…...

聊聊httpclient的CPool

序 本文主要研究一下httpclient的CPool ConnPool org/apache/http/pool/ConnPool.java public interface ConnPool<T, E> {/*** Attempts to lease a connection for the given route and with the given* state from the pool.** param route route of the connecti…...

B2主题优化:WordPress文章每次访问随机增加访问量

老站长都知道&#xff0c;一个新站刚开始创建&#xff0c;内容也不多的时候&#xff0c;用户进来看到文章浏览量要么是0&#xff0c;要么是 个位数&#xff0c;非常影响体验&#xff0c;就会有一种“这个网站没人气&#xff0c;看来不行”的感觉。 即使你的内容做的很好&#x…...

大模型部署手记(1)ChatGLM2+Windows GPU

1.简介&#xff1a; 组织机构&#xff1a;智谱/清华 代码仓&#xff1a;https://github.com/THUDM/ChatGLM2-6B 模型&#xff1a;THUDM/chatglm2-6b 下载&#xff1a;https://huggingface.co/THUDM/chatglm2-6b 镜像下载&#xff1a;https://aliendao.cn/models/THUDM/chat…...

Rust Rocket: 构建Restful服务项目实战

前言 这几天我的笔记系统开发工作进入了搬砖期&#xff0c;前端基于Yew&#xff0c;后端基于Rocket。关于Rocket搭建Restful服务&#xff0c;官方也有介绍&#xff0c;感觉很多细节不到位。因此我打算花2到3天的时间来整理一下&#xff0c;也算是对自己的一个交代。 对于有一…...

苹果签名有多少种类之TF签名(TestFlight签名)是什么?优势是什么?什么场合需要应用到?

&#xff08;一&#xff09;TestFlight 能够让您&#xff1a;邀请内部和外部的测试人员为应用程序提供反馈。 跟踪应用程序在测试过程中发现的 bug 和用户体验问题。 收集 Crash 报告&#xff0c;了解应用程序在真实设备上的运行状况。 要使用 TestFlight&#xff0c;您可以按照…...

如何将图片存到数据库(以mysql为例), 使用ORM Bee更加简单

如何将图片存到数据库 1. 创建数据库: 2. 生成Javabean public class ImageExam implements Serializable {private static final long serialVersionUID 1596686274309L;private Integer id;private String name; // private Blob image;private InputStream image; //将In…...

【“栈、队列”的应用】408数据结构代码

王道数据结构强化课——【“栈、队列”的应用】代码&#xff0c;持续更新 链式存储栈&#xff08;单链表实现&#xff09;&#xff0c;并基于上述定义&#xff0c;栈顶在链头&#xff0c;实现“出栈、入栈、判空、判满”四个基本操作 #include <stdio.h> #include <…...

es的nested查询

一、一层嵌套 mapping: PUT /nested_example {"mappings": {"properties": {"name": {"type": "text"},"books": {"type": "nested","properties": {"title": {"t…...

<一>Qt斗地主游戏开发:开发环境搭建--VS2019+Qt5.15.2

1. 开发环境概述 对于Qt的开发环境来说&#xff0c;主流编码IDE界面一般有两种&#xff1a;Qt Creator或VSQt。为了简单起见&#xff0c;这里的操作系统限定为windows&#xff0c;编译器也通用VS了。Qt版本的话自己选择就可以了&#xff0c;当然VS的版本也是依据Qt版本来选定的…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

云原生安全实战:API网关Kong的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关&#xff08;API Gateway&#xff09; API网关是微服务架构中的核心组件&#xff0c;负责统一管理所有API的流量入口。它像一座…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...