我对交叉值评分指标“roc_auc”和我可以直接导入和调用的roc_auc_评分之间的差异感到困惑。
文档(http://scikit-learn.org/stable/modules/model_evaluation.html#scoring-parameter)表明指定scoring='roc_auc'将使用sklearn.metrics.roc_auc_分数。但是,当我使用scoring='roc_auc'来实现gridsearchcv或cross_val_score时,我会收到与直接调用roc_auc_score时非常不同的数字。
下面是我的代码来帮助演示我所看到的:
# score the model using cross_val_score
rf = RandomForestClassifier(n_estimators=150,
min_samples_leaf=4,
min_samples_split=3,
n_jobs=-1)
scores = cross_val_score(rf, X, y, cv=3, scoring='roc_auc')
print scores
array([ 0.9649023 , 0.96242235, 0.9503313 ])
# do a train_test_split, fit the model, and score with roc_auc_score
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)
rf.fit(X_train, y_train)
print roc_auc_score(y_test, rf.predict(X_test))
0.84634039111363313 # quite a bit different than the scores above!
我觉得我遗漏了一些非常简单的东西——很可能是我在如何实现/解释一个评分指标时出错了。
有人能解释一下这两个评分标准不一致的原因吗?
最佳答案
这是因为你提供了预测的y值,而不是roc ou auc_得分的概率值。此函数接受分数,而不是分类标签。尝试这样做:
print roc_auc_score(y_test, rf.predict_proba(X_test)[:,1])
它应该给出与之前交叉值得分结果相似的结果。Refer to this post for more info
关于python - cross_val_score与scoring ='roc_auc'和roc_auc_score有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33642158/