机器学习笔记:训练集、验证集与测试集
在学习《深度学习原理与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.超参数越少,或者超参数很容易调整,那么可以减少验证集的比例,更多的分配给训练集。
机器学习笔记:训练集、验证集与测试集相关推荐
- 【转载】如何理解数据集中【训练集】、【验证集】和【测试集】
转自<吴恩达深度学习笔记(28)-网络训练验证测试数据集的组成介绍> 训练,验证,测试集(Train / Dev / Test sets) 在配置训练.验证和测试数据集的过程中做出正确决策 ...
- 【Science】破解密码“AlphaGo”诞生,训练Gan破解27%LinkedIn测试集密码
本文讲的是破解密码"AlphaGo"诞生,训练Gan破解27%LinkedIn测试集密码,一项新的研究旨在使用生成对抗网络(GAN) 来加快密码破解的速度.斯蒂文斯理工学院的研究人 ...
- 为什么训练集用fit_transform()而测试集用transform()及sklearn.feature_extraction.text.CountVectorizer API详解
真正讲明白的 https://blog.csdn.net/yyhhlancelot/article/details/85097656 API https://scikit-learn.org/stab ...
- 训练集准确率上升,测试集的准确率没有变化!
训练集准确率上升,测试集的准确率没有变化! 1.问题描述 2.解决办法 1.问题描述 最近利用ResNet18网络做分类问题时,训练集准确率一直在上升,测试集的准确率确几乎没有变化.数据集用的是flo ...
- 训练集山准确率高测试集上准确率很低_推荐算法改版前的AB测试
编辑导语:所谓推荐算法就是利用用户的一些行为,通过一些数学算法,推测出用户可能喜欢的东西:如今很多软件都有这样的操作,对于此系统的设计也会进行测试:本文作者分享了关于推荐算法改版前的AB测试,我们一起 ...
- 训练集山准确率高测试集上准确率很低_拒绝DNN过拟合,谷歌准确预测训练集与测试集泛化差异,还开源了数据集 | ICLR 2019...
鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 深度神经网络(DNN)如今已经无处不在,从下围棋到打星际,DNN已经渗透到图像识别.图像分割.机器翻译等各种领域,并且总是表现惊艳. 然而, ...
- 机器学习笔记:交叉验证
1 交叉验证 训练集拆分成训练集和验证集 训练集训练模型,验证集选择模型(选择好的模型可以用训练集+验证集再训练一次) 不能再用测试集返回来训练模型!(这样可能导致模型过拟合,反而不准) 2 n折交叉 ...
- 机器学习笔记——sklearn 交叉验证(Cross-validation)
sklearn cross validation:https://scikit-learn.org/stable/modules/cross_validation.html 交叉验证(Cross Va ...
- 【入门篇】如何正确使用机器学习中的训练集、验证集和测试集?
[注] ·本文为转载文章,原文作者是王树义老师,原文链接为 https://zhuanlan.zhihu.com/p/71961236 训练集.验证集和测试集,林林总总的数据集合类型,到底该怎么选.怎 ...
- [机器学习] 训练集(train set) 验证集(validation set) 测试集(test set)
在有监督(supervise)的机器学习中,数据集常被分成2~3个即: 训练集(train set) 验证集(validation set) 测试集(test set) 一般需要将样本分成独立的三部分 ...
最新文章
- async [ə'zɪŋk] 函数
- Android官方开发文档Training系列课程中文版:Activity测试之创建功能性测试
- java调用python_Python教程:17个冷门但实用的小技巧
- parasoft Jtest 使用教程:清除错误消息与运行内置测试配置
- 一步步教你实现富文本编辑器(第四部分)
- 移动端canvas_web前端开发分享-css,js移动篇
- 2017年(毕业生)暑期实习信息汇总
- np.squeeze():把张量中维度为1的维度去掉
- Primer – 支撑 GitHub 的 CSS 工具包和准则
- HandlerSocket
- 实用Python程序设计测验 - 007:反向输出一个三位数
- 使用GRUB2制作U盘PE启动盘
- 驾驶证体检医院(114---2 挂对应的医院司机体检)
- 二次函数回归方程_高三||【高三专题】三角函数提优专题卷
- Assigning Pods to Nodes(将Pod分配到Node)
- 传统企业线下收益不可观,问答营销是你线上引流的好方法
- 漏洞poc和漏洞利用_带HTML的PowershellHTML空白空间隐写术和二进制漏洞利用交付[PoC]
- 维基解密创始人被指控与匿名者LulzSec黑客组织合作
- 【Matlab肌电信号】肌电信号处理【含GUI源码 966期】
- 信息收集之——旁站、C段