验证准确性与测试准确性

机器算法验证 机器学习
2022-03-21 17:29:19

我试图弄清楚那些看起来令人困惑的术语。我知道机器学习模型中使用了三种数据“拆分”:

  1. 训练数据 - 训练模型
  2. 验证数据 - 模型选择的交叉验证
  3. 测试数据 - 测试泛化错误。

现在,据我所知,验证数据并不总是被使用,因为可以使用 k 折交叉验证,从而减少进一步减少数据集的需要。其结果称为验证准确度。然后,一旦选择了最好的模型,模型就会从初始数据集(尚未用于训练)中分割出 33% 进行测试。这样的结果会是测试的准确性吗?

这是正确的方法吗?反之亦然?我发现网上使用的术语相互矛盾!我试图找到一些解释为什么我的验证错误大于我的测试错误,但在我找到解决方案之前,我想让我的术语正确。

谢谢。

2个回答

在这种情况下没有标准术语(我已经看到关于这个主题的长时间讨论和辩论),所以我完全理解你,但你应该习惯不同的术语(并假设术语可能不一致或它会改变跨来源)。

我想指出几点:

  • 我从未见过人们使用“验证准确度”(或数据集)来指代测试准确度(或数据集),但我见过人们使用“测试准确度”(或数据集)来指代验证准确度(或数据集)。换句话说,测试(或测试)准确度通常指的是验证准确度,即您在用于训练的数据集上计算的准确度,但您(在训练过程中)用于验证(或“测试”)模型的泛化能力或“提前停止”。

  • 在 k 折交叉验证中,人们通常只提到两个数据集:训练和测试(或验证)。

  • k 折交叉验证只是在数据的不同子集上验证模型的一种方式。这样做有几个原因。例如,您有少量数据,因此您的验证(和训练)数据集非常小,因此您希望通过在整个数据集的几个子集上验证模型来更好地了解模型的泛化能力。

  • 您可能应该有一个单独的(来自验证数据集)数据集进行测试,因为验证数据集可用于提前停止,因此,在某种程度上,它取决于训练过程

我建议使用以下术语

  • 训练数据集:用于拟合模型的数据。
  • 验证数据集:在训练过程中用于验证模型的泛化能力或提前停止的数据
  • 测试数据集:用于训练和验证以外的其他目的的数据。

请注意,其中一些数据集可能会重叠,但这可能几乎永远不会是一件好事(如果您有足够的数据)。

@nbro 的回答是完整的。我只是添加了一些解释来补充。在更传统的教科书中,数据通常分为两组:训练和测试。近年来,随着模型越来越复杂,对模型选择的需求越来越大,开发集或验证集也被考虑在内。开发/验证不应与测试集重叠,否则报告准确性/错误评估无效。在现代环境中:模型在训练集上进行训练,在验证集上进行测试以查看它是否合适,可能会再次调整和训练模型并再次验证多次。选择最终模型后,测试集用于计算准确性,错误报告。重要的是测试集只被触及一次。