我正在尝试使用以下方法使用sklearn.metrics.roc_auc_score
计算ROC曲线下的面积:
roc_auc = sklearn.metrics.roc_auc_score(actual, predicted)
其中,actual
是一个具有真值分类标签的二进制向量,predicted
是一个具有分类标签的二进制向量,我的分类器已经预测了。
然而,我得到的roc_auc
的值与准确度值(正确预测标签的样本的比例)完全相似。这不是一次性的事情。我在不同的参数值上尝试我的分类器,每次我都得到相同的结果。
我在这里做错了什么?
这是因为您传递的是分类器的决策,而不是它计算的分数。最近在SO上有一个关于这个的问题,并向scikit-learn
提出了一个相关的pull请求。
ROC曲线的点(以及它下面的面积)是当分类阈值变化时,您研究精度-召回率权衡。默认情况下,在二元分类任务中,如果分类器的分数是> 0.5
,那么预测class1
,否则预测class0
。当你改变阈值时,你会得到这样一条曲线。曲线越高(它下面的面积越大),分类器就越好。然而,要获得这条曲线,您需要访问分类器的分数,而不是它的决策。否则,无论决策阈值是什么,决策保持不变,并且AUC退化到精度。
您使用的是哪个分类器?