如何解释 GridSearch 的最佳分数?

Posted

技术标签:

【中文标题】如何解释 GridSearch 的最佳分数?【英文标题】:How to interpret best score from GridSearch? 【发布时间】:2018-09-17 10:42:51 【问题描述】:

我用不同的数据集训练不同的分类器,我需要了解如何正确衡量分类器的有效性。

这是我的代码:

iris = load_iris()

param_grid = 
    'criterion': ['gini', 'entropy'],
    'max_depth': np.arange(4, 6)


tree = GridSearchCV(DecisionTreeClassifier(), param_grid)
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target)

tree.fit(X_train, y_train)
tree_preds = tree.predict(X_test)
tree_performance = accuracy_score(y_test, tree_preds)

print 'Best params: ', tree.best_params_
print 'Best score: ', tree.best_score_
print 'DecisionTree score: ', tree_performance

问题是,GridSearchCV 的最佳分数实际上是多少?它与accuray_score 函数中使用的结果有何不同?

据我了解,accuracy_score 采用测试集类别并将其与算法预测的结果进行比较。结果是正确分类项目的百分比。但是best_score_ 是什么?

这两个值不同,我的脚本的示例输出如下所示:

Best score:  0.955357142857
DecisionTree score:  0.947368421053

【问题讨论】:

【参考方案1】:

GridSearchCV 没有考虑你的测试集(仔细观察,你会发现你没有通过tree.fit() 中的测试集);它报告的分数 best_score_ 来自您的 training 集中的交叉验证 (CV)。来自docs:

best_score_:浮动

best_estimator 的平均交叉验证分数

这个分数本身(在您的示例中为 0.955)是每个(默认,因为您没有指定 cv 参数)3 CV 折叠中的分数的平均值。

另一方面,您的 accuracy_score 来自您的 test 集。

说清楚了,很明显这两个数字不一样;另一方面,如果 CV 过程和训练测试分割都已正确执行,它们也不应该有太大的不同,也可以说是你的情况。

【讨论】:

感谢您的回答!我知道我必须阅读有关 GridSearch 和 CV 的更多信息!

以上是关于如何解释 GridSearch 的最佳分数?的主要内容,如果未能解决你的问题,请参考以下文章

具有 PredefinedSplit 评分的 Sklearn GridSearch 与独立分类器不匹配

如何使用 GridSearch 保存具有最佳参数的 Keras 模型

Gridsearch 给出 AUC 分数的 nan 值

将最佳 GridSearch 分类器写入表格

最佳模型的 GridSearch:保存和加载参数

如何绘制最佳参数对应的随机森林树