为什么将数据分成训练和测试集是不够的

机器算法验证 机器学习 交叉验证
2022-01-23 09:44:21

我知道为了访问分类器的性能,我必须将数据拆分为训练/测试集。但是读这个

在评估估计器的不同设置(“超参数”)时,例如必须为 SVM 手动设置的 C 设置,仍然存在在测试集上过度拟合的风险,因为可以调整参数直到估计器表现最佳。这样,关于测试集的知识可以“泄漏”到模型中,并且评估指标不再报告泛化性能。为了解决这个问题,可以将数据集的另一部分作为所谓的“验证集”:在训练集上进行训练,然后对验证集进行评估,当实验似乎成功时,最终评估可以在测试集上完成。

我看到引入了另一个(第三个)验证集,这是通过在超参数调整期间过度拟合测试集来证明的。

问题是我无法理解这种过度拟合是如何出现的,因此无法理解第三组的理由。

4个回答

即使您只在训练数据上训练模型,您也在优化超参数(例如C对于 SVM)基于测试集。因此,您对性能的估计可能是乐观的,因为您实际上是在报告最佳情况的结果。正如本网站上的一些人已经提到的,优化是统计中万恶之源

性能估计应始终在完全独立的数据上进行。如果您正在基于测试数据优化某些方面,那么您的测试数据不再是独立的,您将需要一个验证集。

解决这个问题的另一种方法是通过嵌套交叉验证,它由两个相互缠绕的交叉验证过程组成。内部交叉验证用于调优(估计给定一组超参数的性能,经过优化),外部交叉验证估计整个机器学习管道的泛化性能(即优化超参数+训练最终模型)。

我认为这样想事情是最容易的。交叉验证用于两件事,调整模型/算法的超参数,以及评估模型/算法的性能。

考虑将第一次使用作为算法实际训练的一部分。例如,确定 GLM 的正则化强度的交叉验证是确定 GLM 最终结果的一部分。这种使用通常称为内部交叉验证因为(超)参数仍在设置中,所以调整集损失并不是衡量实际算法性能的重要指标。

交叉验证的第二个用途是使用生成模型的整个过程之外的数据来测试其预测能力。这个过程称为外部交叉验证

请注意,内部验证可能是生成模型的过程的一部分,因此在许多情况下,内部和外部交叉验证都是必要的。

在模型构建期间,您在训练样本上训练模型。请注意,您可以训练不同的模型(即不同的技术,如 SVM、LDA、随机森林……或具有不同调整参数值的相同技术,或混合使用)。

在您训练的所有不同模型中,您必须选择一个,因此您使用验证样本来找到测试样本中误差最小的模型。

对于这个“最终”模型,我们仍然需要估计误差,因此我们使用测试样本

交叉验证并没有完全克服模型选择中的过拟合问题,它只是减少了它。交叉验证错误取决于您使用的数据集。数据集越小,交叉验证误差就越高。

此外,如果您在模型选择方面有很高的自由度,那么模型就有表现不佳的危险,因为交叉验证标准会过度拟合。

因此,当数据分为 2 组(即训练集和测试集)时,拆分是静态完成的。因此,有可能过度拟合训练集。但是,交叉验证集是通过不同的方法创建的,例如 k 折交叉验证、留一交叉验证(LOOCV)等,这有助于确保消除 2 集拆分的精确拟合奖励从而减少过拟合的机会。

这些是一些可以帮助您更好地理解的资源。

因此,当您拥有更大的数据集而不是较小的数据集时,交叉验证会为您提供帮助。