当前位置: 首页 > 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版本来选定的…...

python:进度条的使用(tqdm)

摘要&#xff1a;为python程序进度条&#xff0c;可以知道程序运行进度。 python中&#xff0c;常用的进度条模块是tqdm&#xff0c;将介绍tqdm的安装和使用 1、安装tqdm: pip install tqdm2、tqdm的使用&#xff1a; &#xff08;1&#xff09;在for循环中的使用&#xff1…...

Java类型转换和类型提升

目录 一、类型转换 1.1 自动类型转换&#xff08;隐式&#xff09; 1.1.1 int 与 long 之间 1.1.2 float 与 double 之间 1.1.3 int 与 byte 之间 1.2 强制类型转换&#xff08;显示&#xff09; 1.2.1 int 与 long 之间 1.2.2 float 与 double 之间 1.2.3 int 与 d…...

C# 读取 Excel xlsx 文件,显示在 DataGridView 中

编写 read_excel.cs 如下 using System; using System.Collections.Generic; using System.ComponentModel; using System.IO; using System.Data; using System.Linq; using System.Text; using System.Data.OleDb;namespace ReadExcel {public partial class Program{static…...

Docker02基本管理

目录 1、Docker 网络 1.1 Docker 网络实现原理 1.2 Docker 的网络模式 1.3 网络模式详解 1.4 资源控制 1.5 进行CPU压力测试 1.6 清理docker占用的磁盘空间 1.7 生产扩展 1、Docker 网络 1.1 Docker 网络实现原理 Docker使用Linux桥接&#xff0c;在宿主机虚拟一个Docke…...

Scala第十章

Scala第十章 章节目标 1.数组 2.元组 3.列表 4.集 5.映射 6.迭代器 7.函数式编程 8.案例&#xff1a;学生成绩单 scala总目录 文档资料下载...

10.4 校招 实习 内推 面经

绿泡*泡&#xff1a; neituijunsir 交流裙 &#xff0c;内推/实习/校招汇总表格 1、校招 | 集度2024届秋招正式启动&#xff08;内推&#xff09; 校招 | 集度2024届秋招正式启动&#xff08;内推&#xff09; 2、校招 | 道通科技2024秋季校园招聘正式启动啦&#xff01; …...

从0开始深入理解并发、线程与等待通知机制(中)

一&#xff0c;深入学习 Java 的线程 线程的状态/生命周期 Java 中线程的状态分为 6 种&#xff1a; 1. 初始(NEW)&#xff1a;新创建了一个线程对象&#xff0c;但还没有调用 start()方法。 2. 运行(RUNNABLE)&#xff1a;Java 线程中将就绪&#xff08;ready&#xff09;和…...

UE5报错及解决办法

1、编译报错&#xff0c;内容如下&#xff1a; Unable to build while Live Coding is active. Exit the editor and game, or press CtrlAltF11 if iterating on code in the editor or game 解决办法 取消Enable Live Coding勾选...

怎么通过docker/portainer部署vue项目

这篇文章分享一下如何通过docker将vue项目打包成镜像文件&#xff0c;并使用打包的镜像在docker/portainer上部署运行&#xff0c;写这篇文章参考了vue-cli和docker的官方文档。 首先&#xff0c;阅读vue-cli关于docker部署的说明&#xff0c;上面提供了关键的几个步骤。 从上面…...

【面试经典150 | 矩阵】旋转图像

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;原地旋转方法二&#xff1a;翻转代替旋转 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带…...

网站开发使用什么软件/chatgpt网页

五款好玩又好用的Linux网络测试和监控工具【51CTO精选译文】在这篇介绍几款Linux网络测试实用工具的文章中&#xff0c;我们使用Bandwidthd、Speedometer、Nethogs、Darkstat和iperf&#xff0c;跟踪带宽使用情况和网络速度、查找网络资源消耗大户&#xff0c;以及测试性能。Ba…...

化工类网站建设推广/东莞海外网络推广

我用JAVA做一个在web中显示翻页的程序简化代码如下&#xff1a;JSP代码&#xff1a;//对页面操作的类的对象我用JAVA做一个在web中显示翻页的程序 简化代码如下&#xff1a;JSP代码&#xff1a;//对页面操作的类的对象int j0;for(j1;j<ph.getTotalpages();j){session.setAtt…...

做网站公司哪家公司/连云港百度推广总代理

现在dao已经独立出去了&#xff0c;办公室里的一部分人员分出去&#xff0c;但还有一些干等着呢。得了&#xff0c;继续弄吧&#xff0c;业务这层&#xff0c;包含的还有控制器这一层&#xff0c;所以直接使用springmvc就好了。在pom里加上4.0.0scc-modulemodule-parent0.0.1-S…...

企业做网站的注意事项/东莞精准网络营销推广

websphere存档日期&#xff1a;2019年5月13日 | 首次发布&#xff1a;2009年3月11日 本文介绍了使用WebSphere Transformation Extender&#xff0c;其WebSphere Design Studio和WebSphere DataPower SOA Appliance的数据集成方案。 遗留系统的一个常见问题是与使用XML而不是其…...

网站开发 实时更新/软文案例200字

摘 要&#xff1a;三相异步电动机是污水处理厂常见的设备&#xff0c;针对故障进行维修是机电维修人员的技能。结合笔者所学知识和历次维修实践总结了三相异步电动机常见故障&#xff0c;分析了造成故障的原因&#xff0c;并且介绍了检查排除故障的一些方法&#xff0c;以提高…...

wordpress页脚改颜色/网页制作教程书籍

获取WordPress的最新文章列表虽然很容易&#xff0c;但似乎并不太满足我的要求。最简单的获取方法只需要两行代码就可以搞定&#xff0c;如下&#xff1a; <?php require(wp-blog-header.php); ?><?php get_archives(postbypost, 10); ?>但我的想法是&#xff…...