交叉验证和测试性能的差异

Difference in cross validation and testing performance

我正在使用带有交叉验证的 sklearn(5 倍)。

交叉验证。 我得到我的数据集并将其用于 5 折交叉验证。 返回的分数(全部 5 个)在 .80 到 .85

范围内

直接培训 如果我将相同的数据集与训练测试拆分(0.2 测试部分)一起使用并直接拟合和预测,我得到大约 0.70 的准确度。 (recall 和 ROC AUC 也小于)。

所以, 在交叉验证中,折叠的单一组合等于我们直接在训练测试拆分中所做的,对吗?那为什么会有这么大的差别呢?我读到原因是交叉验证过度适合训练数据。但是当考虑交叉验证的单一设置(组合)时,它不就等于直接拟合和预测吗?如果我以某种方式知道交叉验证中特定组合拆分数据的确切方式,并使用该确切的拆分方法用于直接方法,我不应该获得相同的准确性吗?

在不查看代码和您的数据的情况下,我只能给出一个有根据的猜测。首先,我们需要验证数据集的原因是 调整超参数 。使用交叉验证,我们试图找到最好的超参数,使我们对验证集的预测准确度最高。因此,带有它选择的超参数的最终模型 过度拟合 验证数据集。因此,验证数据集的预测准确性并不是对模型性能的真实衡量。您需要有一个从未接触过的测试数据集来评估您的模型性能。

如果您只使用 train/test 拆分而不使用验证集,由于

,测试数据集的性能可能会更差
  1. 你的超参数没有调整,因为你没有验证 数据集
  2. 因为你的模型永远不会看到测试数据集,所以它不是 对其过度拟合。