在 sklearn 中使用交叉验证和 AUC-ROC 进行逻辑回归模型

Posted

技术标签:

【中文标题】在 sklearn 中使用交叉验证和 AUC-ROC 进行逻辑回归模型【英文标题】:Using cross validation and AUC-ROC for a logistic regression model in sklearn 【发布时间】:2017-10-17 14:03:12 【问题描述】:

我正在使用sklearn 包构建逻辑回归模型,然后对其进行评估。具体来说,我想使用交叉验证来做到这一点,但无法通过cross_val_score 函数找出正确的方法。

根据我看到的documentation和一些examples,我需要传递函数模型、特征、结果和评分方法。但是,AUC 不需要预测,它需要概率,所以它可以尝试不同的阈值,并据此计算 ROC 曲线。那么这里的正确方法是什么?这个函数有'roc_auc'作为可能的评分方法,所以我假设它与它兼容,我只是不确定使用它的正确方法。示例代码 sn-p 下面。

from sklearn.linear_model import LogisticRegression
from sklearn.cross_validation import cross_val_score

features = ['a', 'b', 'c']
outcome = ['d']
X = df[features]
y = df[outcome]
crossval_scores = cross_val_score(LogisticRegression(), X, y, scoring='roc_auc', cv=10)

基本上,我不明白为什么我需要在这里将y 传递给我的cross_val_score 函数,而不是在逻辑回归模型中使用X 计算的概率。它只是自己做那部分吗?

【问题讨论】:

您的问题得到解决了吗?如果是这样,您应该用旁边的复选框标记正确答案。否则,有什么可以澄清的? 【参考方案1】:

cross_val_score 使用真实值训练模型,执行预测,然后将这些预测与真实值进行比较——评分步骤。这就是你传入y 的原因:它是true 值,即“基本事实”。

通过指定scoring='roc_auc' 调用的roc_auc_score 函数依赖于y_truey_pred:模型的基本事实和基于X 的预测值。

【讨论】:

【参考方案2】:

所有监督学习方法(包括逻辑回归)都需要真正的 y 值来拟合模型。

在拟合模型后,我们通常希望:

做出预测,然后 对这些预测进行评分(通常在“保留”数据上,例如使用交叉验证)

cross_val_score 为您提供模型预测的交叉验证分数。但是要对预测进行评分,它首先需要做出预测,并且要做出预测,它首先需要拟合模型,这需要X 和(true)y

cross_val_score 如您所见,接受不同的评分指标。因此,例如,如果您选择f1-score,则在cross-val-score 期间生成的模型预测将是类预测(来自模型的predict() 方法)。如果您选择 roc_auc 作为指标,用于对模型进行评分的模型预测将是概率预测(来自模型的 predict_proba() 方法)。

【讨论】:

以上是关于在 sklearn 中使用交叉验证和 AUC-ROC 进行逻辑回归模型的主要内容,如果未能解决你的问题,请参考以下文章

在 sklearn 中使用交叉验证和 AUC-ROC 进行逻辑回归模型

如何在 python 的 sklearn 中使用交叉验证执行 SMOTE

在 sklearn 中使用网格搜索和管道获得正确的交叉验证分数

如何在 sklearn 中编写自定义估算器并对其使用交叉验证?

使用 sklearn 在嵌套交叉验证中使用 GroupKFold

如何将 KerasClassifier、Hyperopt 和 Sklearn 交叉验证放在一起