为什么模型预测准确率高但是模型泛化不好

机器算法验证 机器学习 交叉验证 预测模型 过拟合
2022-04-05 02:39:18

我已经训练了几个我正在试验的模型。一个是逻辑回归,另一个是随机森林。我的数据集中有 1000 个样本中的 10 个(具有 4 个特征),并且我已经试验了有多少样本会产生最佳的样本外测试精度。我已经完成了 10 k-fold 验证,以及超参数的一些网格搜索优化......而且我一直(**)在测试数据上获得大约 82% 的准确度预测。我在 70:30 拆分我的数据集,在 70% 上进行训练,然后在看不见的 30% 上进行测试。这两个模型都给了我大约 82% 的测试数据预测准确率。我认为这是一个很好的结果,因为 k-fold 验证给了我很好的准确性,我没有过拟合或欠拟合。但是,我一定是...

...当我尝试对训练模型后很快捕获的新数据样本进行预测时...我的准确率远未达到 82%。事实上,当我将我的模型预测与实际发生的结果进行比较时,我的成功率不到 40%。

所以我想我的模型不能很好地概括。我可以从这里去哪里?我想首先确认问题到底是什么。82% 的准确率是否具有误导性?我的现场成绩怎么会差这么多?难道这4个功能根本不够好?在这种情况下,我怎样才能获得 82% 的测试准确率?我是否可以对模型进行测试以获得进一步工作的见解?

(**随着新数据实时出现,我经常重新训练模型)

3个回答

如果不深入挖掘您的模型和数据,就很难说。但是,您似乎一直在做很多交叉验证、模型调整、交叉验证、模型调整等等。这与糟糕的样本外性能一起表明您对测试集过度拟合这比过度拟合样本内更难(这确实很容易),但很有可能做到。本质上,如果这是问题所在,那么您重复的模型调整周期只是将其与完整数据集的特性相匹配。

至于现在做什么:你应该深入挖掘你的数据训练数据和测试数据之间是否发生了巨大变化?新数据中是否有任何在训练数据中表现不佳的强预测因子?像这样的东西。但请记住,您对模型的调整越多,您越有可能过度拟合,因此请谨慎行事。

顺便说一句,假设您可以事先识别此类,您应该能够通过始终预测保留数据集中的多数类来获得至少 50% 的准确度。因此,只有 40% 的准确率是一个很大的危险信号。看起来有些事情发生了重大变化。(此外,这个简单的基准是准确性不是一个好的评估指标的原因之一。)

我赞同斯蒂芬的回答,即可能的罪魁祸首是过度拟合整个数据集。也就是说,要验证的另一件事是,您的训练代码与生产代码中的数据处理管道之间没有区别。例如,您是否在训练前对特征进行规范化?如果是这样,您是否记录了平均值和标准差并将相同的标准化应用于实时数据?

对我来说,这似乎是一个数据问题。您在 70:30 拆分数据,但 70% 的所有数据是否都在 30% 集合的数据之前?

如果您在训练集中混合较旧和较新的数据,可能会出现问题。如果数据的生成涉及时间,这似乎是您拥有实时数据的情况,那么测试集不应包含在训练集之前生成的数据。