网格搜索分数返回啥值?
Posted
技术标签:
【中文标题】网格搜索分数返回啥值?【英文标题】:What value is returned in a grid search score?网格搜索分数返回什么值? 【发布时间】:2019-10-12 03:18:49 【问题描述】:我在一个预测模型上运行了GridSearchCV
,并将评分设置为准确度。 X
和 Y
是测试拆分。
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import classification_report
from sklearn.svm import SVC
tuned_parameters = ['kernel': ['rbf'], 'gamma': [1e-3, 1e-4],
'C': [10, 100, 1000]]
print("Tuning hyperparameters for accuracy")
clf_gs = GridSearchCV(SVC(), tuned_parameters, cv=5,
scoring = 'accuracy')
clf_gs.fit(X, Y)
print(clf_gs.best_params_)
print("Grid scores on development set:")
means = clf_gs.cv_results_['mean_test_score']
stds = clf_gs.cv_results_['std_test_score']
for mean, std, params in zip(means, stds, clf_gs.cv_results_['params']):
print("%0.3f (+/-%0.03f) for %r"
% (mean, std * 2, params))
print("The scores are computed on the full evaluation set.")
y_true, y_pred = Y, clf_gs.predict(X)
print(classification_report(y_true, y_pred))
我得到的网格分数为
Tuning hyperparameters for accuracy
'C': 1000, 'gamma': 0.001, 'kernel': 'rbf'
Grid scores on development set:
0.994 (+/-0.000) for 'C': 10, 'gamma': 0.001, 'kernel': 'rbf'
0.986 (+/-0.000) for 'C': 10, 'gamma': 0.0001, 'kernel': 'rbf'
0.995 (+/-0.001) for 'C': 100, 'gamma': 0.001, 'kernel': 'rbf'
0.988 (+/-0.000) for 'C': 100, 'gamma': 0.0001, 'kernel': 'rbf'
0.995 (+/-0.001) for 'C': 1000, 'gamma': 0.001, 'kernel': 'rbf'
0.994 (+/-0.001) for 'C': 1000, 'gamma': 0.0001, 'kernel': 'rbf'
The scores are computed on the full evaluation set.
precision recall f1-score support
0 1.00 1.00 1.00 67343
3 0.88 0.78 0.83 995
accuracy 1.00 68338
macro avg 0.94 0.89 0.91 68338
weighted avg 1.00 1.00 1.00 68338
sklearn.metrics.GridSearchCV.score
表示它返回给定数据的分数。是预测模型的准确度得分还是与GridSearchCV
相关的不同得分?当我使用SVC
将参数值设置为默认值时,我的准确率仅低于 90%,并且没想到会看到这么多的改进,我只是感到困惑。
【问题讨论】:
【参考方案1】:是的,根据这行代码:
clf_gs = GridSearchCV(SVC(), tuned_parameters, cv=5,
scoring = 'accuracy')
,您的评分指标是accuracy
。
CV
/eval
分数之间的差异来自数据集:CV
在 5 折交叉验证集上进行训练和测试,这些验证集是您的训练数据的子集。相比之下,eval
在整个训练数据上进行训练,并在测试数据上进行测试,这与您的训练集无关。
您可以谷歌 'k-fold cross-validation Washington' 以查看有关底层算法的更多详细信息。
【讨论】:
我认为它返回的分数基于可以获得的最佳准确度值,不一定是可以获得的实际准确度值。因为我将 C 和 gamma 的值分别调整为 1000 和 0.001,但没有得到那么高的准确度。我仍然有疑问,但感谢您的回答。 或者看看this thread on Kaggle,可能问题出在你数据的属性上。以上是关于网格搜索分数返回啥值?的主要内容,如果未能解决你的问题,请参考以下文章