每个人都知道如何执行ķ-fold 交叉验证,但在哪里/如何使用它时经常有很多困惑。所以感谢这个好问题:)
首先,交叉验证是一种用于评估的统计方法,而不是用于训练:
- 当然,训练是在交叉验证期间进行的,但它是在ķ次,因此有ķ过程中产生的模型。这些模型中的每一个都旨在仅应用于其相应的测试集,并且通常在 CV 过程之后使用其中一个模型是错误的(选择其中最好的模型将是一个更大的错误ķ楷模)。如果需要最终模型,则应在整个训练集上独立于 CV 过程对其进行训练。
- CV 的目的是通过最小化在训练集和测试集之间拆分数据引起的机会因素,从而获得对方法性能的可靠评估。折叠间的变化也可以用来评估方法的稳定性:如果性能有很大的变化,则该方法不稳定,并且生成的模型可能会过度拟合,因为它过多地依赖于训练集。
何时使用单独的测试集?
- 如果目的只是可靠地评估单一方法,则无需训练最终模型或在单独的测试集上对其进行评估。
- 然而,很多时候人们使用 CV 来评估的不是一种方法而是多种方法:使用不同的算法、不同的超参数值、不同的特征等。这些情况属于参数调整的范畴,这是一种训练:目标确实是找到某些参数的最佳值,即使这些参数似乎是设计的一部分(例如某些预处理选项)。与任何训练阶段一样,存在过度拟合的风险:使用 CV 使风险非常低,但即使使用 CV,风险也存在(尤其是使用大量方法时)。这意味着基于 CV 性能选择最佳方法可能是偶然的,这就是为什么在此设置中正确的方法是(1)根据 CV 性能选择最佳方法;(2) 在全训练集上仅使用该方法训练最终模型;(3) 在单独的测试集上进行评估。这确保了在测试集上获得的性能是可靠的。