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_的含义