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

时间:2019-04-04 16:42:33

标签: python scikit-learn logistic-regression gridsearchcv

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

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

对于网格搜索简历,我的代码如下:

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 个答案:

答案 0 :(得分:1)

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

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

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

相关问题