【机器学习】训练集、验证集与测试集

关于数据集的划分是基本概念,但是有时候看其他人代码时,经常被弄得云里雾里。

特作此记录。

目录

训练集(train set)

验证集(val set)

验证集的正确打开方式

测试集(test set)


【机器学习】训练集、验证集与测试集_第1张图片

  • train(含label)——进一步分为train和val。val用于调参。train与val无交集,所以val也可以看模型效果。

        训练集拿来训练模型参数的,对于所有的训练集,训练一个epoch之后,我们会用验证集来测试一下模型在上面的性能,由于训练集和验证集的不可交性,所以在验证集上面的结果是有参考意义的。

  • test ——实际中使用模型时遇到的数据(一般无label)。

训练集(train set)

用于训练模型以及确定模型权重。

验证集(val set)

用于确定网络结构以及调整模型的超参数。

使用验证集是为了快速调参,也就是用验证集选择超参数(网络层数,网络节点数,迭代次数,学习率这些)。另外用验证集还可以监控模型是否异常(过拟合什么的),然后决定是不是要提前停止训练。

验证集的关键在于选择超参数,我们手动调参是为了让模型在验证集上的表现越来越好,如果把测试集作为验证集,调参去拟合测试集,就有点像作弊了。

验证集不参与反向传播(梯度下降过程的)。

【机器学习】训练集、验证集与测试集_第2张图片

验证集的正确打开方式

验证集可以看做参与了 “人工调参” 的训练过程

一般训练几个 epoch 就跑一次验证看看效果(大部分网络自带这个功能)

这样做的第一个好处是:可以及时发现模型或者参数的问题,比如模型在验证集上发散啦、出现很奇怪的结果啦(Inf)、mAP不增长或者增长很慢啦等等情况,这时可以及时终止训练,重新调参或者调整模型,而不需要等到训练结束。

另一个好处是验证模型的泛化能力,如果在验证集上的效果比训练集上差很多,就该考虑模型是否过拟合了。同时,还可以通过验证集对比不同的模型(模型选择)。

验证集是否一定要有?

不一定要有

数据划分

数据量较小(传统机器学习)

  • 没有验证集,建议设置成训练集:测试集=7:3
  • 有验证集,训练集:验证集:测试集=6:2:2

深度学习

  • 深度学习中若是数据很大,可以将训练集、验证集、测试集比例调整为98:1:1

测试集(test set)

用于检验模型的泛化能力。既不参与参数的学习过程,也不参与参数的选择过程,仅仅用于模型评价。

划分依据:

根据吴恩达老师所说,在数据较少情况下(万为单位及以下),可以按照60%,20%,20%的比例来划分数据。大数据时代,百万级别的数据情况下,训练集的数据可以达到98%左右。

同时,建议验证集与训练集的数据来自同一分布。

文章来源:

训练集、验证集与测试集_关关在干嘛的博客-CSDN博客_验证集有反向传播

验证集和测试集的区别?_不吃饭就会放大招的博客-CSDN博客_测试集和验证集能一样吗

数据集的划分,验证集参与训练了吗?_无枒的博客-CSDN博客_验证集参与训练吗

你可能感兴趣的:(机器学习,人工智能,深度学习)