训练和验证与训练、测试和验证

机器算法验证 回归 机器学习 交叉验证 验证 火车
2022-04-02 03:28:49

我正在从事一项新工作,这将使我有机会做一些很酷的机器学习工作。自从读研究生以来,我还没有更深入地接触过这些东西,我想对一些概念进行一些澄清。

我学习 ML 的方式是将数据 (80/20) 拆分为训练和验证数据集。您将模型拟合到 80% 的训练拆分,并通过交叉验证获得错误率、损失等。然后,您使用您使用训练数据构建的拟合模型并弹出 20% 的验证数据集,以比较错误率、损失等是否相似。如果是这样,模型是好的。

我一直在做一些研究以更新我的知识,并且我现在注意到通常是(70/20/10)的 3 向拆分(训练/测试/验证)。我很困惑这种 3 路拆分与我在学校教的 2 路拆分有何不同。另外,我很确定在提到 2-way split 方法时,我一直在将测试与验证互换。

有人可以验证我对 2-way split 的理解是否正确并解释它与 3-way split 之间的区别吗?

谢谢!

4个回答

正如您还提到的,在您的双向拆分中,您的验证集实际上是您的测试集。在您的方式中,您没有提到超参数优化 (HPO),但它是许多机器学习算法中的关键步骤。当您需要 HPO 时,您要么需要单独的验证集来调整 HP,要么使用对训练集的交叉验证来调整它们。最后,模型在整个训练数据集上进行训练,并在测试集上进行测试。

在您的 ML 算法中,如果您不需要优化 HP,您可以像您一样在训练集上使用交叉验证来获得损失指标,但这也可以通过使用整个数据集来完成,即您有五个80-20 次拆分,并平均每个折叠的损失。您不需要两级测试。

您描述的两种方法本质上是相同的。当您描述使用交叉验证时,这类似于使用重复多次的训练测试拆分。在训练集上训练/验证/测试和带有交叉验证的训练/测试完全相同,但对不同的训练/测试拆分使用交叉验证重复。

一般来说,只要有可能在训练集上使用来自测试集的信息,您就需要将数据集拆分为测试/训练。作为建模者,这些信息可能会流经您。让它沉入一会儿。

例如,如果您使用一种方法构建一个模型,请使用 80/20 拆分或交叉验证。如果您在 80/20 拆分上比较许多方法,您会隐含地使用来自建模中测试集性能的信息。在这种情况下添加一个验证数据集。如果您选择其中一些模型进行超参数优化,则需要进行额外的测试测试,或者在构建模型时对其进行优化(这很难)。等等。

在任何情况下,尽可能长时间地保留验证数据集并尽可能少地使用它。

“所有模型都是错误的,但有些模型是有用的”。乔治 EP 盒

当我们建立模型时,我们的主要材料是数据。但可能永远无法实现的最终目标是将我们的模型用于不同的数据,并像我们用我们训练的数据训练的那样执行。但我们显然可以尝试,然后出现这种分裂。现在我不会讨论拆分的大小。但我将重点关注我们应该拆分 2 种方式还是 3 种方式。对我来说,你控制的数据没有必要分成三部分。例如,您有来自 100 名患者的心电图数据。您可以通过将 80/20 拆分为训练和测试来训练以查看您的模型是否有效。如果它在测试集中表现良好,则无需验证,因为您的测试集与您的训练集不同。

问题是何时需要验证集。例如,临床医生有额外的 20 名患者 ECG 数据未在您的训练和测试集中使用。您训练了模型,通过测试集调整了参数。但是现在您拥有临床医生拥有的完全不同的数据。他们将尝试您的模型进行验证。所以直觉可以,医生希望有一些模型。他们有 120 名患者的数据。他们给你100个数据。您将它们拆分为训练和测试。之后,医生在验证集中使用您的模型。在任何比赛中,例如 kaggle,数据可能都是这样划分的。