如何解读GridSearch的最高分?

时间:2018-04-07 15:50:59

标签: machine-learning scikit-learn classification decision-tree cross-validation

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

这是我的代码:

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 个答案:

答案 0 :(得分:1)

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

  

best_score _ :float

     

best_estimator的平均交叉验证分数

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

另一方面,accuracy_score来自您的测试设置。

澄清的是,显然这两个数字并不相同;另一方面,如果CV程序和列车测试分割都已正确执行,它们也不应该很多不同,这可以说是你的情况。