交叉验证——使用测试集还是验证集来预测?

ADJ*_*ADJ 5 validation machine-learning

我有一个关于交叉验证的问题。

在机器学习中,我们知道有训练、验证和测试集。测试集是最终运行以查看最终模型/分类器的执行情况。

但是在交叉验证的过程中:我们将数据拆分为训练集和测试集(大多数教程使用这个术语),所以我很困惑。我们是否需要将整个数据分成 3 部分:训练、验证、测试?因为在交叉验证中,我们一直在谈论与 2 个集合的关系:训练和另一个。

有人可以帮忙澄清一下吗?

谢谢

Lui*_*eal 8

是的,这有点令人困惑,因为有些材料可以互换使用 CV/test 而有些材料不使用,但我会尝试通过理解为什么需要它来使其易于理解:

你需要训练集来做到这一点,训练,但你也需要一种方法来确保你的算法不会记住训练集(它不会过度拟合)以及它的表现如何,所以这使得需要测试集,所以你可以给它从未见过的数据,你可以衡量性能。

但是.... ML 完全是关于实验的,您将训练、评估、调整一些旋钮(超参数或架构),再次训练,一遍又一遍地评估,然后您将选择最佳实验结果,部署您的系统并在生产中,它获得了从未见过的数据,并且表现不佳,发生了什么?你用你的测试数据来拟合参数并做出决定,所以你过度拟合了这个测试数据,但你不知道它对从未见过的数据有什么影响。

交叉验证解决了这个问题,你有你的训练数据来学习参数,并测试数据来评估它在看不见的数据上的表现,但仍然需要一种方法来试验最好的超参数和架构:你获取训练数据的样本并调用它交叉验证集,并隐藏您的测试数据,直到最后您将永远不会使用它。

现在使用您的训练数据来学习参数,并使用超参数和架构进行实验,但是您将在交叉验证数据而不是测试数据上评估每个实验(您可以将其视为使用 CV 数据作为学习超参数的一种方式),在您进行了大量试验并选择了最佳性能选项(在 CV 上)之后,您现在可以使用您的测试数据来评估它在将其部署到生产之前从未见过的数据上的性能。

  • 不只是错误,它取决于问题的类型(回归、分类等),有不同的性能指标,对于每个特定问题,有些指标可能是足够的,而另一些则没有。典型的例子:如果你开发垃圾邮件分类机器学习系统,最糟糕的是什么?在您的收件箱中收到不受欢迎的电子邮件,或丢失被错误分类为垃圾邮件但不是垃圾邮件的重要邮件?显然,丢失重要邮件是最糟糕的,所以你使用足够的度量 (2认同)
  • 或者如果你开发一个疾病检测系统,你可以: 把一个健康的病人诊断为有病,那会让他去额外的检查阳性比假阴性。检查 sklearn 的指标包:http://scikit-learn.org/stable/modules/classes.html#sklearn-metrics-metrics (2认同)

Pru*_*une 5

这通常是一个非此即彼的选择。根据设计,交叉验证过程是验证模型的另一种方法。您不需要单独的验证集 - 各种训练测试分区的交互取代了对验证集的需求。

想想名字,交叉验证......:-)