在使用单独的建模/验证集构建回归模型时,是否适合“循环”验证数据?

机器算法验证 回归 预测模型 验证
2022-03-18 09:50:02

假设我在建模/验证观察之间有 80/20 的比例。我已经为建模数据集拟合了一个模型,并且我对在验证数据集上看到的错误感到满意。在我推出我的模型以对未来的观察进行评分之前,将验证与建模数据结合起来以获得 100% 数据的更新参数估计是否合适?我听过两种观点:

  1. 我执行的验证是对模型结构的验证,即我应用的一组预测变量和转换。当我可以使用它来更新我的估计时,将 20% 的数据留在桌面上是没有意义的。

  2. 我执行的验证部分是对我在建模数据集上计算的参数估计值的验证。如果我更新模型拟合,我就改变了估计,我不再有客观的方法来测试更新模型的性能。

我一直遵循论点#1,但最近我听到几个人争论#2。我想看看其他人对此有何看法。你在文献或其他地方看到过关于这个主题的任何好的讨论吗?

1个回答

选项 1 是正确的。您可以添加验证数据集以更新模型的参数。

这就是答案。现在让我们讨论一下。如果您对引导程序进行了 k 折交叉验证(并且您应该这样做 - 从您的问题中不清楚),那么您所做的是您的选择 1. 的事实会更清楚。

在 5 折交叉验证中,您将拥有的数据分成 5 个大小相等的随机集合。让我们称它们为 A、B、C、D 和 E。然后您在 4 个集合中学习模型(模型本身)的参数,例如 A、B、C 和 D,并在第五个模型 E.(这是你做的)。但是随后您选择另一组作为测试/验证(例如 D)并使用其他 4 个(A、B、C 和 E)来学习。在 D 上测试它,重复。

您的预测模型的错误是 5 次测试的平均错误 - 您对预测错误如何依赖于学习和测试集有所了解。在最好的情况下,所有 5 个误差度量都是相似的,您可以合理地确定您的模型将来会在该级别上执行。

但是什么型号??对于每组学习集,您将拥有不同的模型参数。用 A、B、C、D 学习生成参数集 P1,用 A、B、C、E 学习,参数集 P2,直到 P5。他们都不是你的模型。

您测试的是构建模型的过程的预期误差,当学习集为 A、B、C、D 以及当它是 A、B、C、E 时,您遵循的过程等等。此过程是否会生成具有该预期错误的模型。

那么最终的模型是什么?它是对所有可用数据(A、B、C、D 和 E)的程序的应用。具有参数集 P0 的新模型,您以前从未生成过,您没有数据来测试它(因为您在确定参数 P0 时“使用”了所有数据),但您有合理的期望它会在未来执行与使用相同程序构建的其他模型(P1、P2...)的数据相同。

如果您没有执行交叉验证或引导程序(引导程序解释起来有点复杂——我将其从讨论中排除)怎么办?如果您只执行一次学习/验证拆分和一次错误测量会怎样。然后,论点 2. 可能有点正确,但您有一个更大的问题 - 您只有一个模型误差的度量,并且您不知道该误差对用于验证它的数据的依赖程度。也许,幸运的是,你的 20% 验证集特别容易预测。如果没有对错误进行多次测量,假设您的预测模型的预期错误率对于未来的数据将保持不变是非常冒险的。

哪个是“更大的风险”?假设未来数据的错误将基本保持不变,或者假设添加更多数据来学习你的模型会以某种方式“搞砸”模型并在未来增加其错误率?我真的不知道如何回答这个问题,但我会怀疑随着更多数据而变得更糟的模型......