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

时间:2017-05-17 23:17:35

标签: python scikit-learn logistic-regression cross-validation roc

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

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

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计算的概率。它只是自己做那个部分吗?

2 个答案:

答案 0 :(得分:4)

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

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

  • 进行预测,
  • 对这些预测进行评分(通常采用'保留'数据,例如使用交叉验证)

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

您注意到

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

答案 1 :(得分:3)

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

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