GridSearchCrossValidation 分数和测试集分数有什么区别?

数据挖掘 Python 分类 喀拉斯 网格搜索 网格搜索
2022-02-10 04:39:40

我正在使用python进行分类。我正在使用类GridSearchCV,该类的属性 best_score_ 定义为“best_estimator 的平均交叉验证分数”。

有了这个类,我还可以使用 score 计算测试集的分数

现在,我了解了这两个值之间的理论差异(一个在交叉验证中计算,另一个在测试集上计算),但我应该如何解释它们?例如,如果在案例 1 中我得到这些值(分别作为 best_score_ 和测试集上的分数)0.9236840458731027 0.8483477781024932,而在案例 2 中这些其他值0.8923046854943018 0.8733431353820776,我应该更喜欢哪一个,为什么?为什么两个值的差异会如此之大?

3个回答

每当您(或您的计算机)根据分数做出决定时,这些分数就不能再被认为是公正的。因此best_score_,虽然它是基于对他们看不见的数据的评分模型,但它仍然是对未来表现的乐观偏见估计。(看到这一点的简单方法:如果您的超参数除了随机性之外没有任何影响,那么选择得分最高的一个显然并不比其他的更好,该最大值也不是对以后性能的良好估计。)

因此,您的第二个选择更好,具有更高的(新鲜)测试分数。当然,如果到目前为止您有两个选择,而现在您使用测试分数来选择一个,那不再是对未来表现的无偏估计!

综上所述,通常best_score_与测试性能相当接近,尤其是在您没有太多超参数可玩或它们对建模影响很小的情况下;您的第一个选择是惊人的大跌幅。要考虑的一件事是测试集有多大,以及它的代表性。如果您的测试集太小而无法捕捉到您的人口的所有细微差别,但训练集非常大,那么您的测试分数可能会受到噪音的更大影响,并且尽管存在选择偏差,但交叉验证的分数实际上更稳定。

您应该根据 GridSearchCV 结果选择模型。

您不应根据测试数据集分数进行选择。根据测试分数选择模型会降低模型泛化到看不见的数据的机会。测试数据集应该只查看一次。

对于您列出的特定案例,案例 1 的 GridSearchCV 结果最高,这是更好的模型。

分数变化如此之大的一个可能原因是系统具有相对较高的方差降低方差的方法有很多——增加数据量,应用降维,特征选择,改变不同的算法,增加正则化。

Gridsearch 交叉验证可用于学习预测函数的超参数。考虑到在相同数据上学习和测试模型是一个很大的错误。当使用相同的数据进行学习和测试时,获得满分但无法预测任何有用的尚未看到的数据(即过度拟合)的机会非常高。在训练模型时,通常的做法是保留部分数据作为测试集,以防止过度拟合并衡量模型的性能。此外,请注意,最佳超参数可以通过网格搜索技术确定,并且网格搜索得出的分数不应用作衡量模型性能的标准。请参阅此页面了解更多信息

话虽如此,来自 GridSearchCV 的 best_score_ 是 best_estimator 的平均交叉验证分数。例如,在使用 5 折交叉验证的情况下,GridSearchCV 将数据分成 5 折,训练模型 5 次。每次,它都会将一个折叠放在一边,并根据剩余的 4 个折叠来训练模型。然后,它根据左侧折叠来衡量模型的性能。最后,它返回 5 个模型的性能平均值作为最终得分。

现在,让我们回答这个问题:最佳估计量是什么意思?它是搜索选择的估计量,或者是在遗漏数据上给出最高分数(或最小损失,如果指定)的估计量。GridSearchCV 的目标是找到最优的超参数。它接收一系列参数作为输入,并根据上面解释的平均分数找到最好的参数。网格搜索根据输入参数的不同组合训练不同的模型,最终返回最佳模型或最佳估计器。因此,best_score_ 是最佳估计器的平均分数。值得注意的是,在上述上下文中使用交叉验证调整超参数是帮助您防止过度拟合的方法之一。

在您的情况下,0.8923046854943018 是最佳估计器的平均分数。我们称这个分数为交叉验证分数。对于您的情况,我会选择第二种情况,因为在这种情况下没有过度拟合,并且交叉验证和测试分数几乎相同。在第一种情况下,交叉验证明显高于看不见的测试分数,并且存在过度拟合。这意味着该模型在训练数据上效果很好,但在看不见的数据上效果不佳。