k-fold 交叉验证如何适应训练/验证/测试集的上下文?

机器算法验证 交叉验证 数据集 过拟合
2022-01-23 12:38:41

我的主要问题是关于试图了解 k 折交叉验证如何适合具有训练/验证/测试集的上下文(如果它完全适合这种上下文)。

通常,人们谈到将数据拆分为训练、验证和测试集——比如在 Andrew Ng 的课程中​​以 60/20/20 的比例进行——其中验证集用于识别模型训练的最佳参数。

但是,如果想在数据量相对较小的情况下使用 k-fold 交叉验证来获得更具代表性的准确度度量,那么在这个 60/20/20 拆分中,k-fold 交叉验证到底需要什么?设想?

例如,这是否意味着我们实际上会结合训练集和测试集(80% 的数据)并对它们进行 k 折交叉验证以获得我们的准确度度量(通过明确的“测试集”有效地丢弃?如果是这样,我们在 a) 生产中使用哪个训练模型,以及 b) 用于验证集并确定最佳训练参数?例如,a 和 b 的一个可能答案可能是使用最佳折叠模型。

2个回答

交叉验证通常有助于避免需要验证集。

训练/验证/测试数据集的基本思想如下:

  1. 训练:您在训练数据上尝试使用不同超参数选择的不同类型的模型(例如,具有不同特征选择的线性模型、具有不同层选择的神经网络、具有不同 mtry 值的随机森林)。

  2. 验证:您根据验证集比较第 1 步中模型的性能并选择获胜者。这有助于避免因过度拟合训练数据集而做出错误决策。

  3. 测试:您在测试数据上尝试获胜者模型只是为了感受它在现实中的表现如何。这揭示了第 2 步中引入的过度拟合。在这里,您不会做出任何进一步的决定。这只是简单的信息。

现在,在您通过交叉验证替换验证步骤的情况下,对数据的攻击几乎相同,但您只有一个训练和一个测试数据集。不需要验证数据集。

  1. 培训:见上文。

  2. 验证:您对训练数据进行交叉验证,以选择步骤 1 中关于交叉验证性能的最佳模型(此处,原始训练数据被重复拆分为临时训练和验证集)。交叉验证中计算的模型仅用于选择步骤 1 的最佳模型,这些模型都是在完整的训练集上计算的。

  3. 测试:见上文。

K-fold 交叉验证是一种(重新)抽样策略,就像许多其他策略一样。

拆分为训练/验证/测试也是一种抽样策略。

您可以将训练/验证替换为另一种采样策略。然后你会表演K- 对 80% 的数据折叠 CV,对剩余的 20% 进行测试。

您也可以将其应用于测试部分(这就是人们所说的嵌套交叉验证),其中K1折叠用于训练/验证,其余用于测试,然后您在折叠上进行迭代。