我正在使用 scikit learn 来运行一些模型,我很困惑为什么我的测试分数比我的 cv 分数和我的 train 分数低这么多。
一开始,我进行了 80-20 的训练测试拆分。在训练集上,我使用 5 折交叉验证运行网格搜索来选择超参数。refit 设置为 true,因此在选择超参数后,模型会重新适应整个训练集,并用于预测测试集。
当我查看 cv_results_ 时,我发现我的 mean_train_score(我将其解释为每个 k 折交叉验证循环的训练分数)非常高。当我查看 mean_test_score(我称之为 cv score)时,它也非常高。但是当我使用我的外部测试分数时,分数真的很低。这适用于我正在使用的所有模型(我正在测试 10 个模型)。数字可以在下图中看到。
注意:我使用 F1 宏分数作为模型性能的衡量标准。
(LR)逻辑回归,(QDA)二次判别分析,(NN)最近邻,(LSVM)线性支持向量机,(RBFSVM)径向基函数支持向量机,(NB)朴素贝叶斯,(ANN)人工神经网络, (RF) 随机森林,(AB) AdaBoost 随机森林,(GB) 梯度提升随机森林
因此,由于我的测试集性能远低于我的训练分数,我确信我过度拟合了。但我不知道为什么我的简历分数会那么好?如果我的设置容易过度拟合,当我进行 5 折交叉验证时,我不会看到我的训练集的 4/5 过度拟合,这意味着我的 CV 分数也会很低吗?我不明白为什么我不会过拟合导致 5 倍 CV 步骤中的高 CV 分数,而是过拟合导致测试集中的低性能。