scikit-learn中的roc_auc_score()返回准确率值

8 投票
1 回答
11052 浏览
提问于 2025-04-17 21:45

我正在尝试使用 sklearn.metrics.roc_auc_score 来计算 ROC 曲线下的面积,方法如下:

roc_auc = sklearn.metrics.roc_auc_score(actual, predicted)

这里的 actual 是一个二进制向量,里面是实际的分类标签,而 predicted 是我这个分类器预测出来的分类标签的二进制向量。

但是,我得到的 roc_auc 值和准确率的值完全一样(也就是正确预测的样本比例)。这不是偶然的情况。我尝试了不同的参数值,每次得到的结果都是一样的。

我到底哪里出错了呢?

1 个回答

15

这是因为你传入的是分类器的决策结果,而不是它计算的分数。最近在StackOverflow上有一个关于这个问题的讨论,还有一个相关的代码更新请求给scikit-learn

ROC曲线(以及它下面的面积)的意义在于,你可以研究在改变分类阈值时,准确率和召回率之间的权衡。在二分类任务中,默认情况下,如果分类器的分数大于0.5,那么就预测为class1,否则预测为class0。当你改变这个阈值时,就会得到像这样的曲线。曲线越高(下面的面积越大),说明这个分类器的效果越好。不过,要得到这条曲线,你需要获取分类器的分数,而不是它的决策结果。否则,无论决策阈值是什么,决策结果都不会改变,AUC(曲线下面积)就会退化为准确率。

你使用的是哪个分类器呢?

撰写回答