GridSearchCV 如何计算训练分数?

Posted

技术标签:

【中文标题】GridSearchCV 如何计算训练分数?【英文标题】:How does GridSearchCV compute training scores? 【发布时间】:2018-09-28 16:07:08 【问题描述】:

我很难在GridSearchCV 中找出参数return_train_score。来自docs:

return_train_score:布尔值,可选

       如果是Falsecv_results_ 属性将不包括训练分数。

我的问题是:训练分数是多少?

在下面的代码中,我将数据分成十个分层折叠。因此grid.cv_results_ 包含十个测试分数,即'split0_test_score''split1_test_score'、...、'split9_test_score'。我知道其中的每一个都是由 5 个最近邻分类器获得的成功率,该分类器使用相应的折叠进行测试,剩余的九次折叠用于训练。

grid.cv_results_ 还包含十个火车分数:'split0_train_score''split1_train_score'、...、'split9_train_score'。这些值是如何计算出来的?

from sklearn import datasets
from sklearn.model_selection import GridSearchCV
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import StratifiedKFold    

X, y = datasets.load_iris(True)

skf = StratifiedKFold(n_splits=10, random_state=0)
knn = KNeighborsClassifier()

grid = GridSearchCV(estimator=knn, 
                    cv=skf, 
                    param_grid='n_neighbors': [5], 
                    return_train_score=True)
grid.fit(X, y)

print('Mean test score: '.format(grid.cv_results_['mean_test_score']))
print('Mean train score: '.format(grid.cv_results_['mean_train_score']))
#Mean test score: [ 0.96666667]
#Mean train score: [ 0.96888889]

【问题讨论】:

【参考方案1】:

它是预测模型在所有折叠不包括您正在测试的折叠上的训练分数。在您的情况下,它是您训练模型的 9 折的分数。

【讨论】:

感谢 Jan K 和 @Vivek Kumar 的有用回答。 train score 是否在文档中的任何地方定义?如果是的话,你能给我一个链接吗? @Tonechas GridSearchCV documentation 上的 return_train_score 参数有一些关于它的信息【参考方案2】:

也许我的other answer here 会让你清楚地了解网格搜索的工作。

本质上,训练分数是模型在其训练所依据的相同数据上的得分。

在每个折叠拆分中,数据将分为两部分:训练和测试。训练数据将用于 fit() 内部估计器,测试数据将用于检查其性能。训练分数只是为了检查模型对训练数据的拟合程度。

【讨论】:

以上是关于GridSearchCV 如何计算训练分数?的主要内容,如果未能解决你的问题,请参考以下文章

如何确定 GridSearchCV 中每个评分指标的最佳参数和最佳分数

如何在 scikit-learn 的分类问题中为 F1 分数做 GridSearchCV?

解读 sklearns 的 GridSearchCV 最佳成绩

为啥 GridSearchCV 返回的分数与直接运行模型返回的分数如此不同?

测试准确度分数高于 GridSearchCV 中的最佳分数

如何使用不同的数据集进行 GridSearchCV 训练和测试?