GridSearchCV 如何计算训练分数?

How does GridSearchCV compute training scores?

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

return_train_score : boolean, optional

       If False, the cv_results_ attribute will not include training scores.

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

在下面的代码中,我将数据分成十个分层折叠。因此 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]

这是预测模型在所有折叠上的训练分数不包括您正在测试的那个。在你的例子中,它是你训练模型的 9 折的分数。

也许我的 会让您清楚地了解在网格搜索中的工作。

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

在每一次fold split中,数据都会被分成两部分:train和test。训练数据将用于 fit() 内部估计器,测试数据将用于检查其性能。训练分数只是检查模型与训练数据的拟合程度。