best_score_的gridsearch cv的AUC分数与gridsearch cv的最佳模型的auc_roc_score不同

Posted

技术标签:

【中文标题】best_score_的gridsearch cv的AUC分数与gridsearch cv的最佳模型的auc_roc_score不同【英文标题】:AUC score of gridsearch cv of best_score_ is different from auc_roc_score from best model of gridsearch cv 【发布时间】:2019-08-26 12:21:55 【问题描述】:

我对逻辑回归进行了网格搜索,并将评分设置为“roc_auc”。 grid_clf1.best_score_ 给了我 0.7557 的 auc。之后,我想绘制最佳模型的 ROC 曲线。我看到的 ROC 曲线的 AUC 为 0.50 我完全不明白。

我查看了预测的概率,发现它们都是 0.0 或 1.0。因此,我认为这里出了点问题,但我找不到它是什么。

我的网格搜索cv代码如下:

clf1 = Pipeline([('RS', RobustScaler()), ('LR', 
     LogisticRegression(random_state=1, solver='saga'))])

params = 'LR__C': np.logspace(-3, 0, 5),
      'LR__penalty': ['l1']

grid_clf1 = GridSearchCV(clf1, params, scoring='roc_auc', cv = 5, 
      n_jobs=-1)

grid_clf1.fit(X_train, y_train)
grid_clf1.best_estimator_
grid_clf1.best_score_

因此,最佳模型的 AUC 为 0.7557。 然后,如果我自己计算模型的 AUC:

y_pred_proba = grid_clf1.best_estimator_.predict_probas(X_test)[::,1]

print(roc_auc_score(y_test, y_pred_proba))

这给了我 0.50 的 AUC。

【问题讨论】:

【参考方案1】:

您的示例代码似乎有两个问题:

    您比较不同数据集上的 ROC_AUC 分数。拟合时使用训练集,调用roc_auc_score时使用测试集 使用交叉验证进行评分与简单的roc_auc_score 函数调用略有不同。可以扩展为np.mean(cross_val_score(...))

因此,如果考虑到这一点,您将获得相同的得分值。您可以使用the colab notebook 作为参考。

【讨论】:

感谢您的回答! google colab notebook 说得很清楚。我还有一个问题:cv结果和测试集上的结果相差这么大是正常的吗?还是我应该做更多的折叠以使它们彼此靠近? 可能您的模型过度拟合,因此您应该预处理您的数据或尝试其他模型。 我刚刚发现我对训练数据进行了归一化,而我没有对测试数据进行归一化。无论如何,谢谢!

以上是关于best_score_的gridsearch cv的AUC分数与gridsearch cv的最佳模型的auc_roc_score不同的主要内容,如果未能解决你的问题,请参考以下文章

什么是 Gridsearch.cv_results_ ,可以解释其中的所有内容,即 mean_test_score 等吗?

机器学习入门-使用GridSearch进行网格参数搜索GridSeach(RandomRegressor(), param_grid, cv=3)

在 GridSearch CV 之后进行预测时是不是遵循管道步骤

我不清楚GridSearchCV中best_score_的含义

scikit-learn GridSearchCV best_score_ 是如何计算的?

GridSearchCV best_score_ 属性的含义是啥? (该值与交叉验证数组的平均值不同)