best_score_ 的 gridsearch cv 的 AUC 分数不同于 auc_roc_score 来自 gridsearch cv 的最佳模型

AUC score of gridsearch cv of best_score_ is different from auc_roc_score from best model of gridsearch cv

我对逻辑回归进行了网格搜索并将评分设置为 '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时使用测试集
  2. 交叉验证评分与简单的 roc_auc_score 函数调用略有不同。可以展开为np.mean(cross_val_score(...))

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