我对逻辑回归进行了网格搜索,并将分数设置为"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。
您的示例代码似乎有两个问题:
- 您可以比较不同数据集上的ROC_AUC分数。在拟合过程中使用列车组,调用
roc_auc_score
时使用测试集 - 使用交叉验证进行评分的工作方式与简单的
roc_auc_score
函数调用略有不同。它可以扩展到np.mean(cross_val_score(...))
因此,如果考虑到这一点,您将获得相同的评分值。您可以使用 colab 笔记本作为参考。