我应该使用留一法交叉验证进行测试吗?

人工智能 训练 交叉验证 测试 搜索引擎
2021-11-15 12:18:51

我目前正在使用 20x300 的小型数据集。由于我的数据点很少,我想知道是否可以使用类似于留一法交叉验证但用于测试的方法。

这就是我的想法:

  1. 训练/测试拆分数据,测试集中只有一个数据点。

  2. 在训练数据上训练模型,可能使用网格搜索/交叉验证

  3. 使用步骤 2 中的最佳模型对一个数据点进行预测并将预测保存在数组中

  4. 重复前面的步骤,直到所有数据点都在测试集中

  5. 使用这些预测计算您选择的首选指标(准确度、f1 分数、auc 等)

这种方法的优点是:

  • 您不必将数据拆分为训练/测试,因此您可以使用更多数据点进行训练。

缺点是:

  • 这种方法存在潜在的(?)数据泄漏问题。

  • 由于网格搜索,您正在从可能来自不同模型的一堆预测中计算准确度指标,所以我不确定它的准确度。

我已经尝试过训练/测试拆分的标准方法,但是由于我需要至少取出 5 分进行测试,所以我没有足够的训练分,并且 ROC AUC 变得非常糟糕。

我真的很感激一些关于这种方法是否真的可行以及为什么的反馈。

1个回答

关于k-fold Cross Validation,我喜欢通过考虑两个极端来考虑它:Leave-One-Out Cross-Validation,每次留下一个样本并在剩余样本上训练模型n1,以及2 折交叉验证,您可以将数据集分成两半,并在两个不同的半部分上训练(和验证)两个模型。

选择时的重要方面k偏差-方差权衡请注意,在LOOCV中,您使用几乎与可用样本一样多的样本来训练每个模型(n1),因此验证步骤应该为您提供真实测试误差的无偏估计但是,LOOCV中的每个模型每次都在几乎完全相同的数据集上进行训练!. 这具有重要的后果,因为每个模型的输出彼此高度相关。由于高度相关变量的均值具有很大的方差,LOOCV将遭受巨大的方差。

另一方面,在2-fold CV中,模型不共享公共样本,因此它们不相关,因此它们的输出具有低方差。但是由于我们只使用一半可用样本来训练每个模型,因此该过程将具有很高的偏差(估计的测试误差将偏离真实的测试误差)。

在这种情况下该怎么办?选择中间的东西。通常k=5k=10应该是一个不错的选择。