测试准确率得分高于GridSearchCV中的最佳得分

我在使用GridSearchCV来寻找我的SVM模型中的最佳超参数。但是我在评分方面有点困惑。这是我的网格搜索代码:

# Train SVM with GridSearchCVfrom sklearn.model_selection import GridSearchCVfrom sklearn.svm import SVCfrom sklearn.preprocessing import StandardScalerfrom sklearn.pipeline import Pipelinepipe = Pipeline([    ('scaler', StandardScaler()),     ('SVM', SVC(kernel='rbf', decision_function_shape='ovo'))])param_grid = {                'SVM__C': [1, 10, 100, 1000],                'SVM__gamma': [1, 0.1, 0.01, 0.001]            }clf = GridSearchCV(pipe, param_grid, scoring='accuracy', verbose = 3, cv=5)clf.fit(X_train, y_train)

输出:

GridSearchCV(cv=5,             estimator=Pipeline(steps=[('scaler', StandardScaler()),                                       ('SVM',                                        SVC(decision_function_shape='ovo'))]),             param_grid={'SVM__C': [1, 10, 100, 1000],                         'SVM__gamma': [1, 0.1, 0.01, 0.001]},             scoring='accuracy', verbose=3)

然后我尝试打印最佳得分和测试准确率

print('Best score: ', clf.best_score_)print('Test Accuracy: ', clf.score(X_test, y_test)

它返回

Best score:  0.5501906602583355Test accuracy:  0.5809569840502659

为什么这两者之间的得分不同?据我所知,best_score_cv_results_mean_test_score 的最大值,但为什么测试准确率得分高于最佳得分?我仍然对这个问题感到困惑。


回答:

简而言之:这两个得分指的不是同一组“测试”数据。一个是查看CV中的“测试”得分,另一个是来自单独的测试集。

这是因为CV(交叉验证)是在提供的训练数据上进行的(这里是 X_trainy_train)。best_score 是基于你的训练数据的测试折叠上产生的最高得分。

另一方面,clf.score(X_test, y_test) 给你的是测试集上的得分(准确率)。这两者通常不会(而且一般来说不会)相等。这组测试数据不属于你的训练数据 – 至少不应该属于。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注