【问题标题】:How to draw ROC curve for a multi-class dataset?如何为多类数据集绘制 ROC 曲线?
【发布时间】:2021-12-06 22:23:02
【问题描述】:

我有一个如下所示的多类混淆矩阵,并想为其中一个类(例如 1 类)绘制相关的 ROC 曲线。我知道在这种情况下应该使用“one-VS-all others”理论,但我想知道我们需要如何更改阈值才能获得不同对的 TP 和相应的 FP 率。enter image description here

【问题讨论】:

    标签: machine-learning roc multiclass-classification


    【解决方案1】:

    Sklearn具有方便的实现,计算TPR和FPR以及为您提供AUC的另一个功能。您可以通过通过每个类循环将每个类(所有其他数据为负)对您的数据应用于您的数据。下面的代码由@ 987654321启发。

    import numpy as np
    from sklearn.metrics import roc_auc_score
    from sklearn.metrics import roc_curve, auc
    import matplotlib.pyplot as plt 
    
    #generating synthetic data
    N_classes = 3
    N_per_class=100
    labels = np.concatenate([[i]*N_per_class for i in range(N_classes)])
    preds = np.stack([np.random.uniform(0,1,N_per_class*N_classes) for _ in range(N_classes)]).T
    preds /= preds.sum(1,keepdims=True) #approximate softmax
    
    tpr,fpr,roc_auc = ([[]]*N_classes for _ in range(3))
    f,ax = plt.subplots()
    #generate ROC data
    for i in range(N_classes):
        fpr[i], tpr[i], _ = roc_curve(labels==i, preds[:, i])
        roc_auc[i] = auc(fpr[i], tpr[i])
        ax.plot(fpr[i],tpr[i])
    plt.legend(['Class {:d}'.format(d) for d in range(N_classes)])
    plt.xlabel('FPR')
    plt.ylabel('TPR')
    

    【讨论】:

      猜你喜欢
      • 2021-03-03
      • 2018-12-24
      • 2022-01-13
      • 2019-02-27
      • 1970-01-01
      • 2018-11-29
      • 2015-01-21
      • 2018-12-08
      • 2016-02-04
      相关资源
      最近更新 更多