我们可以在没有任何额外(排除)测试集的情况下使用 k 折交叉验证吗?

数据挖掘 交叉验证
2021-10-13 03:48:57

我在两篇论文中看到了这一点:

作者使用 10 折交叉验证,然后将验证的结果或什至将最佳折叠的结果呈现为他们的建模结果。

没有任何测试数据用于验证最终模型。这些是我正在谈论的同行评审论文。这是正确的做法吗?甚至可以引用这样的来源吗?

1个回答

关键问题是

是否使用 K 折交叉验证来选择最终模型(或算法)?

  1. 如果是,如您所说,那么最终模型应该在与 K-fold CV 中使用的数据没有重叠的额外集(即测试集)上进行测试。

  2. 如果不是,则 K-fold CV 报告的平均分数为最终测试分数,无需额外设置。

因此,如果作者只从所有 K 个模型中挑选出最好的模型,它应该在额外的集合上进行测试。模型在验证折上的得分(来自 K-fold CV)是不可接受的。

此外,这里是该站点上的相关帖子(我的回答),其中更详细地介绍了测试和验证集(分数)。

编辑

我在stats.stackexchange.com上发现了一个类似的问题。此外,阿米巴的这条评论建议“嵌套 CV ”而不是“CV + 测试集”,我认为值得在这里充实。

K-fold CV评估

1. For k = [1,..,K]
  1. tr = (K-1)/K of data, ts = 1/K of data
  2. m[k] = model trained using tr (can be further split into tr2 + v)
  3. score[k] = score of m[k] on ts
3. Test score = average of score[1],...,score[K]

K-fold CV选择与评估

1. tr = 80% of data, ts = 20% of data (or some other ratio)
2. For k = [1,..,K]
  1. tr2 = (K-1)/K of tr, v = 1/K of tr
  2. m[k] = model trained using tr2 (can be further split into tr3 + v2)
  3. score[k] = score of m[k] on v
3. M = best of m[1],...,m[K]
4. Test score = score of M on ts

嵌套 k 折 CV 选择和评估

1. For k = [1,..,K]
  1. tr = (K-1)/K of data, ts = 1/K of data
  2. For k2 = [1,..,K2]
     1. tr2 = (K2-1)/K2 of tr, v = 1/K2 of tr
     2. m[k2] = model trained using tr2 (can be further split into tr3 + v2)
     3. score[k2] = score of m[k2] on v
  3. M = best of m[1],...,m[K2]
  4. score[k] = score of M on ts
2. Test score = average of score[1],...,score[K]

请注意,在这些算法中,model trained包括参数学习、超参数调优和模型选择(当然,最外层的模型选择除外)。例如,为了在超参数 8 和 12 之间进行选择,我们需要一个更深的内部循环model trained