使用验证、训练和测试集的顺序

我正在尝试理解机器学习中模型评估和验证的过程。具体来说,我想知道训练集、验证集和测试集应该如何以及以什么顺序使用。

假设我有一个数据集,我想使用线性回归。我在不同的多项式阶数(超参数)之间犹豫不决。

这篇维基百科文章中,似乎暗示顺序应该是:

  1. 将数据划分为训练集、验证集和测试集
  2. 使用训练集来拟合模型(找到最佳参数:多项式的系数)。
  3. 之后,使用验证集来找到最佳超参数(在这种情况下,是多项式的阶数)(维基百科文章说:“连续地,使用拟合的模型来预测第二个数据集(称为验证数据集)中的观测值的响应”)
  4. 最后,使用测试集来评分使用训练集拟合的模型。

然而,这对我来说似乎很奇怪:如果你还没有选择你的超参数(在这种情况下是多项式的阶数),你怎么能用训练集来拟合你的模型呢?

我看到了三种替代方法,我不确定它们是否正确。

第一种方法

  1. 将数据划分为训练集、验证集和测试集
  2. 对于每个多项式阶数,使用训练集来拟合模型,并使用验证集给出分数。
  3. 对于得分最高的多项式阶数,使用训练集来拟合模型。
  4. 使用测试集进行评估

第二种方法

  1. 将数据划分为训练集、验证集和测试集
  2. 对于每个多项式阶数,仅在验证集上使用交叉验证来拟合和评分模型
  3. 对于得分最高的多项式阶数,使用训练集来拟合模型。
  4. 使用测试集进行评估

第三种方法

  1. 将数据仅划分为两部分:训练/验证集和测试集
  2. 对于每个多项式阶数,仅在训练/验证集上使用交叉验证来拟合和评分模型
  3. 对于得分最高的多项式阶数,使用训练/验证集来拟合模型。
  4. 使用测试集进行评估

所以问题是:

  • 维基百科文章是错误的还是我错过了什么?
  • 我设想的三种方法是否正确?哪一种更可取?是否有比这三种更好的方法?

回答:

维基百科的意思实际上是你的第一种方法。

1 将数据划分为训练集、验证集和测试集

2 使用训练集来拟合模型(找到最佳参数:多项式的系数)。

这只是意味着你使用你的训练数据来拟合模型。

3 之后,使用验证集来找到最佳超参数(在这种情况下,是多项式的阶数)(维基百科文章说:“连续地,使用拟合的模型来预测第二个数据集(称为验证数据集)中的观测值的响应”)

这意味着你使用你的验证数据集来预测其值,使用之前(在训练集上)训练的模型,以获得模型在未见数据上的表现分数。

你会对所有你想查看的超参数组合重复步骤2和3(在你的情况下是你想尝试的不同多项式阶数),以获得每个超参数组合的分数(例如准确率)。

最后,使用测试集来评分使用训练集拟合的模型。

为什么需要验证集,在这个stackexchange问题中解释得很好 https://datascience.stackexchange.com/questions/18339/why-use-both-validation-set-and-test-set


最后,你可以使用你的三种方法中的任何一种。

  1. 方法:

    是最快的,因为你只为每个超参数训练一个模型。你也不需要像其他两种方法那样多的数据。

  2. 方法:

    是最慢的,因为你为k个折叠训练k个分类器,加上所有训练数据的最终一个来验证每个超参数组合。

    你还需要大量数据,因为你将数据分成了三次,并且第一次部分又分成了k个折叠。

    但在这里,你的结果方差最小。通过巧合得到k个好的分类器和一个好的验证结果的可能性很小。这在第一种方法中更可能发生。交叉验证也更不可能过拟合。

  3. 方法:

    其优缺点介于另外两种方法之间。这里也更不可能过拟合。

最后,这将取决于你有多少数据,以及如果你进入更复杂的模型如神经网络,你有多少时间/计算能力以及你愿意花费多少。

编辑 正如@***提到的:请记住,你应该将训练集和验证集作为训练数据用于测试集的评估。你在第二种方法中混淆了训练集和验证集。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注