训练集,验证集,测试集的作用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了训练集,验证集,测试集的作用相关的知识,希望对你有一定的参考价值。

参考技术A 训练数据(baitrain dataset)指的是,你拿来du建模zhi型的数据,拟合数据用
验证数据dao(valid dataset)指的是,你拿来挑模型的数据,因为训练数据可以训练很多个模型,譬如,训练步长、是否正则化等等,,你用验证数据(来挑一个最好的。
测试数据(test dataset)是指,你挑完最好的了,,要看你模型的泛化能力,就要用到这个验证数据了
原则上,当你的模型在三个数据集上的表现差不多时,就说明你的模型比较稳健(robust)
当然,大多数情况都会有点过拟合,也就是在训练数据很好,在验证数据一般,在测试数据比较糟糕
转自: https://zhidao.baidu.com/question/252069310.html

有了模型后,训练集就是用来训练参数的,说准确点,一般是用来梯度下降的。而验证集基本是在每个epoch完成后,用来测试一下当前模型的准确率。因为验证集跟训练集没有交集,因此这个准确率是可靠的。那么为啥还需要一个测试集呢?

这就需要区分一下模型的各种参数了。事实上,对于一个模型来说,其参数可以分为普通参数和超参数。在不引入强化学习的前提下,那么普通参数就是可以被梯度下降所更新的,也就是训练集所更新的参数。另外,还有超参数的概念,比如网络层数、网络节点数、迭代次数、学习率等等,这些参数不在梯度下降的更新范围内。尽管现在已经有一些算法可以用来搜索模型的超参数,但多数情况下我们还是自己人工根据验证集来调。

那也就是说,从狭义来讲,验证集没有参与梯度下降的过程,也就是说是没有经过训练的;但从广义上来看,验证集却参与了一个“人工调参”的过程,我们根据验证集的结果调节了迭代数、调节了学习率等等,使得结果在验证集上最优。因此,我们也可以认为,验证集也参与了训练。

那么就很明显了,我们还需要一个完全没有经过训练的集合,那就是测试集,我们既不用测试集梯度下降,也不用它来控制超参数,只是在模型最终训练完成后,用来测试一下最后准确率。

更详细参考: https://www.cnblogs.com/ying-chease/p/9073701.html

训练、验证和测试集的最佳分割

【中文标题】训练、验证和测试集的最佳分割【英文标题】:Optimal split for training, validation and testing sets 【发布时间】:2021-09-07 07:25:10 【问题描述】:

我最初认为分割训练、验证和测试数据的一个好的经验法则是 60-20-20。但是,最佳答案here 似乎建议使用 80:20 进行训练和测试,然后将 80% 中的 20% 用于验证数据(这相当于使用 Keras 的 model.fit 进行 0.2 的验证拆分())。但是,在这种情况下,这不是 60-20-20 —— 这里测试数据的大小明显大于验证数据的大小。

例如,如果总共有 100 个样本,其中 80% 用于训练,则剩下 80 个样本用于训练,另外 20% 用于测试,使用 20 个样本。

如果您取 80% 中的 20%,则改为取 80 中的 20%,即 16。这总体上意味着训练、验证和测试分别占 64%-16%-20%。

这仍然是正确/好的/一个好的经验法则吗?或者我应该从 80% 中取出总数的 20% 进行测试——这样在这种情况下,我将取出 25% 的训练数据,以便将 20 个样本分配给验证集,我现在有 60 个-20-20 分裂?

对于更合适/标准的做法,为什么会这样?是否有一个标准的、传统的选择?

【问题讨论】:

【参考方案1】:

一切的最终目标是提高模型准确性...拆分取决于您拥有多少实例...如果您能够通过拆分方式获得更好的准确性,那么你可以使用它,但它不会带来剧烈的变化...! 主要一切都取决于您正在处理的数据类型、它有多大或有多少实例。

【讨论】:

所以分割并不重要,只要它产生良好的模型精度? 只需使用标准拆分就可以了......更多地关注 EDA 和特征工程。

以上是关于训练集,验证集,测试集的作用的主要内容,如果未能解决你的问题,请参考以下文章

训练集和测试集

训练集、验证集和测试集

分割训练集测试集验证集的两种方式

分割训练集测试集验证集的两种方式

训练集验证集和测试集的意义(转)

数据集的划分