在学习《深度学习原理与pythorch实战》这本书的4.3.4划分数据集这一小节(即76页划分数据集)的过程中,提到了训练集、测试集与验证集这几个概念,以及为何相对于通用的训练集、测试集,多了一个验证集的概念。不过这本书讲解还是没有那么透彻清晰,基于此查了很多资料,又加深巩固理解了训练集、测试集和验证集的概念。

一、定义

Ripley, B.D在《Pattern Recognition and Neural Networks》(1996)中给出了这三个词的定义。

  • Training set: A set of examples used for learning, which is to fit the parameters [i.e., weights] of the classifier.
  • Validation set: A set of examples used to tune the parameters [i.e., architecture, not weights] of a classifier, for example to choose the number of hidden units in a neural network.
  • Test set: A set of examples used only to assess the performance [generalization] of a fully specified classifier.

翻译为中文大白话就是

训练集(train set) —— 用于训练模型(拟合参数):即模型拟合的数据样本集合,如通过训练拟合一些参数来建立一个分类器。

验证集(validation set)—— 用于确定网络结构或者控制模型复杂程度的超参数(拟合超参数):是模型训练过程中单独留出的样本集,它可以用于调整模型的超参数和用于对模型的能力进行初步评估。 通常用来在模型迭代训练时,用以验证当前模型泛化能力(准确率,召回率等),防止过你话的现象出现,以决定如何调整超参数。具体原理参照本文的二(三)。

测试集(test set) —— 用来评估模最终模型的性能如何(评价模型好坏):测试集没有参于训练,主要是测试训练好的模型的准确能力等,但不能作为调参、选择特征等算法相关的选择的依据。说白了就只用于评价模型好坏的一个数据集。

二、图解训练集、测试集和验证集

(一)是否参与训练

基于数据集是否参与了训练过程,可通过下图来理解,即测试集完全没参与训练,它只是用于测试,评估模型到底性能如何

(二)训练集与测试集

这种最常见的方法就是将数据分为训练集和测试集两个部分,先用训练集训练算法模型,再用测试集测试准确率,示意图如下。

(三)训练集、测试集与验证集

在机器学习的上下文中,超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据。通常情况下,需要对超参数进行优化,给学习机选择一组最优超参数,以提高学习的性能和效果。

但是我们思考一下,如果数据集仅仅分为训练集和测试集,那么我们通过修改一些超参数(不能通过学习来自动调整的参数)来降低误差,但是这种方法在实际中的应用效果却并没有想象的那么好。这是因为超参数都是基于测试集来调整的,就相当于把测试集当成了训练超参数的数据。这样对于新的数据效果不一定会更好。

于是就想出一种解决办法,即保留一个数据集作为验证集,在这些步骤做完之后再进行最终的验证。

而训练集、验证集和测试集的工作流程如下图所示,可以很明显看到训练集用于训练模型,验证集用于调节超参数,而测试集就只是用于评估模型好坏的

(四)交叉验证

下图示意3折交叉验证法,如下所示

三、数据集划分原则

数据划分的方法并没有明确的规定,不过可以参考3个原则:

1.对于小规模样本集(几万量级),常用的分配比例是 60% 训练集、20% 验证集、20% 测试集。
2.对于大规模样本集(百万级以上),只要验证集和测试集的数量足够即可,例如有 100w 条数据,那么留 1w 验证集,1w 测试集即可。1000w 的数据,同样留 1w 验证集和 1w 测试集。
3.超参数越少,或者超参数很容易调整,那么可以减少验证集的比例,更多的分配给训练集。

机器学习笔记:训练集、验证集与测试集相关推荐

  1. 【转载】如何理解数据集中【训练集】、【验证集】和【测试集】

    转自<吴恩达深度学习笔记(28)-网络训练验证测试数据集的组成介绍> 训练,验证,测试集(Train / Dev / Test sets) 在配置训练.验证和测试数据集的过程中做出正确决策 ...

  2. 【Science】破解密码“AlphaGo”诞生,训练Gan破解27%LinkedIn测试集密码

    本文讲的是破解密码"AlphaGo"诞生,训练Gan破解27%LinkedIn测试集密码,一项新的研究旨在使用生成对抗网络(GAN) 来加快密码破解的速度.斯蒂文斯理工学院的研究人 ...

  3. 为什么训练集用fit_transform()而测试集用transform()及sklearn.feature_extraction.text.CountVectorizer API详解

    真正讲明白的 https://blog.csdn.net/yyhhlancelot/article/details/85097656 API https://scikit-learn.org/stab ...

  4. 训练集准确率上升,测试集的准确率没有变化!

    训练集准确率上升,测试集的准确率没有变化! 1.问题描述 2.解决办法 1.问题描述 最近利用ResNet18网络做分类问题时,训练集准确率一直在上升,测试集的准确率确几乎没有变化.数据集用的是flo ...

  5. 训练集山准确率高测试集上准确率很低_推荐算法改版前的AB测试

    编辑导语:所谓推荐算法就是利用用户的一些行为,通过一些数学算法,推测出用户可能喜欢的东西:如今很多软件都有这样的操作,对于此系统的设计也会进行测试:本文作者分享了关于推荐算法改版前的AB测试,我们一起 ...

  6. 训练集山准确率高测试集上准确率很低_拒绝DNN过拟合,谷歌准确预测训练集与测试集泛化差异,还开源了数据集 | ICLR 2019...

    鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 深度神经网络(DNN)如今已经无处不在,从下围棋到打星际,DNN已经渗透到图像识别.图像分割.机器翻译等各种领域,并且总是表现惊艳. 然而, ...

  7. 机器学习笔记:交叉验证

    1 交叉验证 训练集拆分成训练集和验证集 训练集训练模型,验证集选择模型(选择好的模型可以用训练集+验证集再训练一次) 不能再用测试集返回来训练模型!(这样可能导致模型过拟合,反而不准) 2 n折交叉 ...

  8. 机器学习笔记——sklearn 交叉验证(Cross-validation)

    sklearn cross validation:https://scikit-learn.org/stable/modules/cross_validation.html 交叉验证(Cross Va ...

  9. 【入门篇】如何正确使用机器学习中的训练集、验证集和测试集?

    [注] ·本文为转载文章,原文作者是王树义老师,原文链接为 https://zhuanlan.zhihu.com/p/71961236 训练集.验证集和测试集,林林总总的数据集合类型,到底该怎么选.怎 ...

  10. [机器学习] 训练集(train set) 验证集(validation set) 测试集(test set)

    在有监督(supervise)的机器学习中,数据集常被分成2~3个即: 训练集(train set) 验证集(validation set) 测试集(test set) 一般需要将样本分成独立的三部分 ...

最新文章

  1. async [ə'zɪŋk] 函数
  2. Android官方开发文档Training系列课程中文版:Activity测试之创建功能性测试
  3. java调用python_Python教程:17个冷门但实用的小技巧
  4. parasoft Jtest 使用教程:清除错误消息与运行内置测试配置
  5. 一步步教你实现富文本编辑器(第四部分)
  6. 移动端canvas_web前端开发分享-css,js移动篇
  7. 2017年(毕业生)暑期实习信息汇总
  8. np.squeeze():把张量中维度为1的维度去掉
  9. Primer – 支撑 GitHub 的 CSS 工具包和准则
  10. HandlerSocket
  11. 实用Python程序设计测验 - 007:反向输出一个三位数
  12. 使用GRUB2制作U盘PE启动盘
  13. 驾驶证体检医院(114---2 挂对应的医院司机体检)
  14. 二次函数回归方程_高三||【高三专题】三角函数提优专题卷
  15. Assigning Pods to Nodes(将Pod分配到Node)
  16. 传统企业线下收益不可观,问答营销是你线上引流的好方法
  17. 漏洞poc和漏洞利用_带HTML的PowershellHTML空白空间隐写术和二进制漏洞利用交付[PoC]
  18. 维基解密创始人被指控与匿名者LulzSec黑客组织合作
  19. 【Matlab肌电信号】肌电信号处理【含GUI源码 966期】
  20. 信息收集之——旁站、C段

热门文章

  1. Tomcat内存溢出(OutOfMemoryError)
  2. Java SE 01 Java概述
  3. php求1000以内的素数 10个一行,1000以内的素数_php求1000以内质数
  4. Java学生管理系统项目
  5. 仓库管理数据库系统设计
  6. XCode9 拖入文件 不自动添加 compile sources
  7. python实现邻接矩阵转邻接表
  8. C11中auto的使用
  9. html怎么打开一个新窗口打开文件,js怎么打开新窗口
  10. Axure 8.0破解版下载