如何解释 GridSearch 的最佳分数?
How to interpret best score from GridSearch?
我用不同的数据集训练不同的分类器,我需要了解如何正确衡量分类器的有效性。
这是我的代码:
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
GridSearchCV
没有考虑你的测试集(仔细观察,你会发现你没有通过 tree.fit()
中的测试集);它报告的分数 best_score_
来自您 training 集中的 cross-validation (CV)。来自 docs:
best_score_ : float
Mean cross-validated score of the best_estimator
这个分数本身(在你的例子中是 0.955)是每个分数的平均值(默认,因为你没有指定 cv
参数)3 CV folds.
另一方面,您的accuracy_score
来自您的测试集。
说清楚了,应该很明显这两个数字是不一样的;另一方面,如果 CV 程序和 train-test 拆分都已正确执行,它们也不应该 much 不同,这可以说是你的情况.
我用不同的数据集训练不同的分类器,我需要了解如何正确衡量分类器的有效性。
这是我的代码:
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
GridSearchCV
没有考虑你的测试集(仔细观察,你会发现你没有通过 tree.fit()
中的测试集);它报告的分数 best_score_
来自您 training 集中的 cross-validation (CV)。来自 docs:
best_score_ : float
Mean cross-validated score of the best_estimator
这个分数本身(在你的例子中是 0.955)是每个分数的平均值(默认,因为你没有指定 cv
参数)3 CV folds.
另一方面,您的accuracy_score
来自您的测试集。
说清楚了,应该很明显这两个数字是不一样的;另一方面,如果 CV 程序和 train-test 拆分都已正确执行,它们也不应该 much 不同,这可以说是你的情况.