scikit-learn roc_auc_score()返回精度值

Muh*_*qar 6 python scikits scikit-learn

我试图sklearn.metrics.roc_auc_score使用以下方法计算ROC曲线下的面积:

roc_auc = sklearn.metrics.roc_auc_score(actual, predicted)
Run Code Online (Sandbox Code Playgroud)

其中actual是具有地面实况分类标签predicted的二元向量,并且是具有我的分类器预测的分类标签的二元向量.

但是,roc_auc我得到的值与准确度值(标签正确预测的样本比例)完全相似.这不是一次性的事情.我在各种参数值上尝试我的分类器,每次得到相同的结果.

我在这做错了什么?

mba*_*rov 13

这是因为您传递了分类器的决定而不是它计算的分数.最近有一个关于SO问题和一个相关的拉动请求scikit-learn.

ROC曲线(及其下面的区域)的点是您在分类阈值变化时研究精确召回权衡.默认情况下,在二进制分类任务中,如果您的分类器的分数是 > 0.5,则class1预测,否则class0预测.当你改变这个门槛,你得到的曲线.曲线越高(其下面的区域越多),分类器越好.但是,要获得此曲线,您需要访问分类器的分数,而不是其决策.否则无论决策阈值如何,决策都保持不变,AUC退化为准确性.

你使用哪种分类器?

  • 如果您没有置信度值AFAIK,则可以有意义地计算AUC。但是,还有其他性能指标。 (2认同)