我使用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
计算的概率。它只是自己做那个部分吗?
答案 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_true
和y_pred
:基础事实和基于X
的预测值你的模特。