scikit-learn中的roc_auc_score()返回准确率值
我正在尝试使用 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(曲线下面积)就会退化为准确率。
你使用的是哪个分类器呢?