在 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_true
和y_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 中编写自定义估算器并对其使用交叉验证?