【机器学习】验证集和测试集有什么区别_验证集和测试集的区别-程序员宅基地

技术标签: 机器学习  深度学习  神经网络  


定义

  1. Ripley 的著作《模式识别与神经网络》(Pattern Recognition and Neural Networks)中,训练集、验证集和测试集的定义如下:

训练集:用来学习的样本集,用于分类器参数的拟合。

验证集:用来调整分类器超参数的样本集,如在神经网络中选择隐藏层神经元的数量。

测试集:仅用于对已经训练好的分类器进行性能评估的样本集。

  1. 详细解释

训练数据集(Training Set):
是一些我们已经知道输入和输出的数据集训练机器去学习,通过拟合去寻找模型的初始参数。例如在神经网络(Neural Networks)中, 我们用训练数据集和反向传播算法(Backpropagation)去每个神经元找到最优的比重(Weights)。

验证数据集(Validation Set):
也是一些我们已经知道输入和输出的数据集,通过让机器学习去优化调整模型的参数,在神经网络中, 我们用验证数据集去寻找最优的网络深度(number of hidden layers),或者决定反向传播算法的停止点;在普通的机器学习中常用的交叉验证(Cross Validation) 就是把训练数据集本身再细分成不同的验证数据集去训练模型。

测试数据集(Test Set):
用户测试模型表现的数据集,根据误差(一般为预测输出与实际输出的不同)来判断一个模型的好坏。


验证集和测试集的区别

  1. 验证集和测试集的对比
    在这里插入图片描述

  2. 验证集的作用:
    使用验证集是为了快速调参,也就是用验证集选择超参数(网络层数,网络节点数,迭代次数,学习率这些)。
    另外用验证集还可以监控模型是否异常(过拟合啦什么的),然后决定是不是要提前停止训练。
    验证集的关键在于选择超参数,我们手动调参是为了让模型在验证集上的表现越来越好,如果把测试集作为验证集,调参去拟合测试集,就有点像作弊了。
    而测试集既 不参与参数的学习过程,也不参与参数的选择过程,仅仅用于模型评价。

  3. 验证集的正确打开方式:
    验证集可以看做参与了 “人工调参” 的训练过程。
    一般训练几个 epoch 就跑一次验证看看效果(大部分网络自带这个功能)。
    这样做的第一个好处是:可以及时发现模型或者参数的问题,比如模型在验证集上发散啦、出现很奇怪的结果啦(Inf)、mAP不增长或者增长很慢啦等等情况,这时可以及时终止训练,重新调参或者调整模型,而不需要等到训练结束。
    另一个好处是验证模型的泛化能力,如果在验证集上的效果比训练集上差很多,就该考虑模型是否过拟合了。同时,还可以通过验证集对比不同的模型。


为什么验证数据集和测试数据集两者都需要?

因为验证数据集(Validation Set)用来调整模型参数从而选择最优模型,模型本身已经同时知道了输入和输出,所以从验证数据集上得出的误差(Error)会有偏差(Bias)。

但是我们只用测试数据集(Test Set) 去评估模型的表现,并不会去调整优化模型。

在传统的机器学习中,这三者一般的比例为training/validation/test = 50/25/25, 但是有些时候如果模型不需要很多调整只要拟合就可时,或者training本身就是training+validation (比如cross validation)时,也可以training/test =7/3.

但是在深度学习中,由于数据量本身很大,而且训练神经网络需要的数据很多,可以把更多的数据分给training,而相应减少validation和test。


参考链接:

  1. 机器之心
  2. https://blog.csdn.net/JNingWei/article/details/78170171
  3. https://blog.csdn.net/qq_31347869/article/details/98203028
  4. https://zhuanlan.zhihu.com/p/29133576
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44211968/article/details/120814758

智能推荐

VS调试时出现未加载XXX.pdb_未加载pdb-程序员宅基地

填写程序的过程中,设置断点进行断点调试,单步调试时会进入到一些底层的文件中,这时候就会出现进行设置都加载完成了,就不会再出现开始的问题了..._未加载pdb

<<ActionScript 3.0 语言和组件参考>>-程序员宅基地

http://livedocs.adobe.com/flash/9.0_cn/ActionScriptLangRefV3/

SayHello界面的编辑-程序员宅基地

整体运行效果展示 MainActivity.java:import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import

网络ACL简介-程序员宅基地

网络ACL是一个子网级别的可选安全层,通过与子网关联的出方向/入方向规则控制出入子网的数据流。如图1所示。图1安全组与网络ACL网络ACL与安全组类似,都是安全防护策略,当您想增加额外的安全防护层时,就可以启用网络ACL。安全组只有“允许”策略,但网络ACL可以“拒绝”和“允许”,两者结合起来,可以实现更精细、更复杂的安全访问控制。网络ACL与安全组的详细区别请参见安全..._网络acl

深度学习网络疑问与解答-程序员宅基地

1卷积的计算和连接方式和视觉系统的一样?答:不一样Hubel 和 Wiesel 于 1962 年进行的一项有趣的试验详细说明了这一观点,他们验证出大脑中的一些个体神经细胞只有在特定方向的边缘存在时才能做出反应(即放电)。卷积只是在模拟视觉系统的工作方式,视觉系统的具体连接方式和计算方式和卷积不一定是一样的,卷积只是模仿工作方式。提出问题的原因由于卷积是需要高频的计算的,而人脑的神经元是连死不会动的,卷积是一个滑窗,不可能神经元会自己动,一会连这一会连那吧。因此提出这个问题。...

Annotation理解及运用_annotation层的作用-程序员宅基地

什么是Annotation我们在平时的开发过程中看到很多如@Override,@SuppressWarnings,@Test等样式的代码就是注解,注解是放到类、构造器、方法、属性、参数前的标记。Annotation概念Annontation是Java5开始引入的新特征。中文名称一般叫注解。它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。更通俗的意思是为程序的元素(类、方法、成员变量)加上更直观更明了的说明,这些说明信息是与程序_annotation层的作用

随便推点

关于平场校正算法的理解-程序员宅基地

1. 什么是平场校正什么是平场校正呢,专业术语就是:用于消除各像素响应不均一的算法;那么什么是像素相应不均一呢,说白了就是像素点对光转换成电荷的能力,进而体现为我们所说的像素值的大小;2. 怎样进行平场校正l 首先要获取系统的暗本像素值(取平均值),简称(暗场校正);获得该值的目的在于得到,CCD在特定的环境下(光亮、温度、时间相同)产生的暗像素值的大小,用一下公式表示 (1)..._平场校正算法

mongodb 报错:Authentication failed 问题_authsource-程序员宅基地

问题:连接数据库时报错com.mongodb.MongoSecurityException: Exception authenticating MongoCredential{mechanism=SCRAM-SHA-1, userName=‘root’, source=‘gateway’, password=, mechanismProperties=} Command failed with error 18 (AuthenticationFailed): ‘Authentication failed_authsource

Python习题100例_写程序,输入任意整数,输出100除以这个整数的结果,结果保留小数点后两位,如果输入0-程序员宅基地

本文实例全部来自runoob.com的Python基础教程实例1题目:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?分析:通过三层循环,将个、十、百位上的数分别循环一次,当其中任意两位相同时,则跳过,当各位上的数都不同时,输出# 代码count = 0for i in range( 1 , 5 ) : for j in range( 1 , ..._写程序,输入任意整数,输出100除以这个整数的结果,结果保留小数点后两位,如果输入0

fullter 二次封装 下拉刷新 上拉加载更多_flutter smartrefresher的customfooterbug上拉加载状态_nicepainkiller的博客-程序员宅基地

使用到的插件pull_to_refresh | Flutter Packagea widget provided to the flutter scroll component drop-down refresh and pull up load.https://pub.flutter-io.cn/packages/pull_to_refresh #下拉刷新 pull_to_refresh: ^2.0.0大致效果:在这里我们对 pull_to_refresh 进行了两次.._flutter smartrefresher的customfooterbug上拉加载状态

codeforces 732D 模拟暴力-程序员宅基地

D. Examstime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputVasiliy has an exam period which will continue for

shell编写脚本,显示进度条-程序员宅基地

编写脚本,显示进度条#!/bin/bashjindu(){while :do echo -n '#' sleep 0.2done}jindu &cp -a $1 $2killall $!echo "拷贝完成''