【问题标题】:AUC score of gridsearch cv of best_score_ is different from auc_roc_score from best model of gridsearch cvbest_score_的gridsearch cv的AUC分数与gridsearch cv的最佳模型的auc_roc_score不同
【发布时间】: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。

【问题讨论】:

    标签: python scikit-learn logistic-regression gridsearchcv


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回答! google colab notebook 说得很清楚。我还有一个问题:cv结果和测试集上的结果相差这么大是正常的吗?还是我应该做更多的折叠以使它们彼此靠近?
    • 可能您的模型过度拟合,因此您应该预处理您的数据或尝试其他模型。
    • 我刚刚发现我对训练数据进行了归一化,而我没有对测试数据进行归一化。无论如何,谢谢!
    猜你喜欢
    • 2021-10-10
    • 2022-12-23
    • 2021-08-05
    • 1970-01-01
    • 2018-09-17
    • 2019-06-09
    • 1970-01-01
    • 2018-10-20
    • 2021-05-15
    相关资源
    最近更新 更多