【问题标题】:How to plot average ROC and AUC in Python?如何在 Python 中绘制平均 ROC 和 AUC?
【发布时间】:2020-06-07 20:49:50
【问题描述】:

我需要使用二元分类(用户 1 或 0 在每种情况下)对用户进行分类。

我有 30 个用户,有 30 组 FPR 和 TPR。

我没有使用roc_curve(y_test.ravel(), y_score.ravel()) 来获取 FPR 和 TPF(这是有原因的,我必须使用二进制分类对它们中的每一个进行分类,并使用我自己的代码生成 FPR A 和 TPF)。

实际上,我的设置是我没有将类标签存储为多类。我所做的是将一个用户作为正面类别,将其余用户作为负面类别。我对所有其他用户重复了一遍。然后我使用自己的代码计算了 FPR 和 TPF,而不使用 roc_auc_score

假设我在 alist 中已经有了 FPR 和 TPF 的值。

我有这些代码:

from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as plt
from scipy import interp

n_classes=30

# First aggregate all false positive rates
all_fpr = np.unique(np.concatenate([fpr_svc[i] for i in range(n_classes)])) # Classified using SVC

# Then interpolate all ROC curves at this points
mean_tpr = np.zeros_like(all_fpr)
for i in range(n_classes):
    mean_tpr += interp(all_fpr, fpr_svc[i], tpr_svc[i])

# Finally average it and compute AUC
mean_tpr /= n_classes

fpr = all_fpr[:]
tpr = mean_tpr[:]

plt.figure()
lw = 2
plt.plot(fpr, tpr, color='darkorange',
         lw=lw)
plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Acceptance Rate')
plt.ylabel('True Acceptance Rate')
plt.title('Receiver operating characteristic example')
plt.legend(loc="lower right")
plt.show()

但是,它产生了这个看起来很奇怪的数字。

此外,我如何获得平均 AUC?

【问题讨论】:

    标签: python roc auc


    【解决方案1】:

    我不确定我是否理解您的设置,但通常您可以使用 sklearns roc_auc_score 计算多类分类器的平均 AUC。如果平均是指将每个班级与其他班级进行比较,请使用ovo(一对一)。否则,如果您希望将每个类与所有其他类一起比较,请使用ovr(一个与休息)。这是multi_class 参数的文档:

    multi_class {'raise', 'ovr', 'ovo'}, default='raise'

    仅限多类。确定要使用的配置类型。默认值提高 一个错误,因此必须显式传递ovrovo

    'ovr':计算每个类与其余类的 AUC [3] [4]。这 以与多标签情况相同的方式处理多类情况。 即使average == 'macro' 也对类不平衡敏感,因为 阶级不平衡影响每个“其余”的构成 分组。

    'ovo':计算所有可能的成对组合的平均 AUC 类[5]。 average == 'macro'时对类不平衡不敏感。

    https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.htm

    【讨论】:

    • 实际上,我的设置是我没有将类标签存储为多类。我所做的是将一个用户作为正面类别,将其余用户作为负面类别。我对所有其他用户重复了一遍。然后我使用自己的代码计算了 FPR 和 TPF,而不使用 roc_auc_score。
    • 听起来像 OVR。
    • 无论如何,如果您已经计算了 TPR 和 FPR,为什么不直接积分呢?例如。 docs.scipy.org/doc/scipy/reference/tutorial/…
    猜你喜欢
    • 2019-04-11
    • 2018-12-28
    • 2019-02-27
    • 2021-01-30
    • 2017-11-12
    • 2019-05-02
    • 2017-08-11
    • 2021-11-13
    • 2014-09-20
    相关资源
    最近更新 更多