假设我最初将数据集分为训练集(80%)和测试集(20%),对训练集进行10折交叉验证,并获得平均R²值为75%。之后,我在测试集上检查最佳模型的准确性,得到R²值为74%,这表明模型相当稳健。现在,在将模型部署到实际应用之前,我用整个数据集对其进行了调整。有人问我模型的近似R²值;如果我说74%或75%,我将忽略这样一个事实:模型现在是用更多的数据(测试集)调整过的。使用整个数据集对所选模型进行留一法交叉验证(LOOCV),将预测目标与实际目标进行比较,检查R²值(假设现在是80%),然后说现实世界的模型很可能具有80%的R²,这种方法是否合理?我认为没有问题,但不知道这种方法是否正确。
回答:
确实,你应该在整个数据集上重新训练模型,这可能会带来性能提升。然而,在这种情况下,你的整个数据集不应该包括训练集和测试集!它应该只是训练数据集,但不进行任何交叉验证。因此,之前你有80%的数据用于训练,并且进行了10折交叉验证,这意味着你实际上是在完整数据(训练集+测试集)的72%上训练模型,并保留8%用于验证。现在,你应该在整个80%的数据上进行训练,并再次在未见过的测试集上报告你的最终结果。
如果你在训练集+测试集上进行LOOCV,你就无法报告在验证样本上的性能表现,因为这是模型微调的方式,你甚至可能会过度拟合验证数据。