【问题标题】:scikit-learn roc_auc_score() returns accuracy valuesscikit-learn roc_auc_score() 返回准确度值
【发布时间】:2014-04-14 15:55:10
【问题描述】:

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

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

其中actual 是一个带有真实分类标签的二进制向量,predicted 是一个带有我的分类器预测的分类标签的二进制向量。

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

我在这里做错了什么?

【问题讨论】:

    标签: python scikit-learn scikits


    【解决方案1】:

    这是因为您传递的是分类器的决定,而不是它计算的分数。有一个question on this on SO recently 和一个相关的拉取请求到scikit-learn

    ROC 曲线的点(及其下方的区域)是您在分类阈值变化时研究精确召回权衡。默认情况下,在二元分类任务中,如果你的分类器的分数是> 0.5,则预测class1,否则预测class0。当您更改该阈值时,您会得到一条类似this 的曲线。曲线越高(曲线下方的面积越大),分类器就越好。但是,要获得此曲线,您需要访问分类器的分数,而不是其决策。否则,无论决策阈值是多少,决策保持不变,AUC 退化为准确度。

    您使用的是哪个分类器?

    【讨论】:

    • 我没有使用任何内置分类器。它是一种适用于我的特定实验的启发式方法,它不给出任何置信度值,只给出分类标签。你有什么建议吗?
    • 另外,问题似乎只发生在我将平衡数据(相同数量的 +ve 和 -ve 示例)传递给roc_auc_score() 时。如果我传递不平衡的数据(但二进制向量),准确率和AUC的结果是不同的。
    • 如果您没有置信度值,AFAIK,您可以有意义地计算 AUC。不过还有其他性能指标。
    • 感谢您的帮助。
    猜你喜欢
    • 2021-03-31
    • 1970-01-01
    • 2014-11-24
    • 2022-12-17
    • 2016-08-09
    • 2017-06-21
    • 2021-09-13
    • 2018-10-20
    • 2016-08-19
    相关资源
    最近更新 更多