网格搜索分数返回啥值?

Posted

技术标签:

【中文标题】网格搜索分数返回啥值?【英文标题】:What value is returned in a grid search score?网格搜索分数返回什么值? 【发布时间】:2019-10-12 03:18:49 【问题描述】:

我在一个预测模型上运行了GridSearchCV,并将评分设置为准确度。 XY 是测试拆分。

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' 以查看有关底层算法的更多详细信息。

【讨论】:

我认为它返回的分数基于可以获得的最佳准确度值,不一定是可以获得的实际准确度值。因为我将 Cgamma 的值分别调整为 1000 和 0.001,但没有得到那么高的准确度。我仍然有疑问,但感谢您的回答。 或者看看this thread on Kaggle,可能问题出在你数据的属性上。

以上是关于网格搜索分数返回啥值?的主要内容,如果未能解决你的问题,请参考以下文章

keras 的指标返回啥值?标量还是张量?

Keras 中的 model.evaluate() 返回啥值?

recv函数返回啥值?

round()round函数返回啥值?

请问delphi中pchar()是个啥函数,返回啥值?

Oracle中substr用法,如果截取长度超过值的长度会返回啥值。