如何在计算 tpr 时获得不同的数组大小?

数据挖掘 分类 scikit-学习
2022-03-12 07:09:50

在学习 ROC 曲线时,我对它们的制作方式感到困惑。

我在这里考虑鸢尾花分类问题。要计算 TPR,我们可以使用 现在在这种情况下,首先我们输入测试数据并使用上面的公式找出 TPR 和 FPR。但是在这种情况下,我们如何获得不同的数组大小。

TPR=True positiveTrue positive+ False Negative

>>>fpr = dict()
>>>tpr = dict()
>>>roc_auc = dict()
>>>for i in range(n_classes):
       fpr[i], tpr[i], _ = roc_curve(y_test[:, i], y_score[:, i])
       roc_auc[i] = auc(fpr[i], tpr[i])


tpr(true positive rate)
0: array([ 0.04761905,  1.        ,  1.        ]),  1: array([
0.03333333,  0.03333333,  0.1       ,  0.1       ,  0.2       ,
         0.2       ,  0.23333333,  0.23333333,  0.36666667,  0.36666667,
         0.4       ,  0.4       ,  0.7       ,  0.7       ,  0.73333333,
         0.73333333,  0.76666667,  0.76666667,  0.8       ,  0.8       ,
         0.83333333,  0.83333333,  0.86666667,  0.86666667,  0.9       ,
         0.9       ,  0.93333333,  0.93333333,  0.96666667,  0.96666667,
         1.        ,  1.        ]),  2: array([ 0.04166667,  0.79166667,  0.79166667,  0.95833333,  0.95833333,
         1.        ,  1.        ]),
1个回答

由于 ROC 曲线中的点数取决于唯一预测的数量,因此您会为不同的类获得不同的数组大小。

如果您的模型仅预测 0、0.5 和 1,您的 ROC 曲线将包含三个点。如果您的模型预测 100 个不同的概率,您的 ROC 曲线将有大约 100 个点。(在实践中,ROC 曲线的长度可能有几个额外的点,其中附加了点 (0,0) 和 (1,1)。

如果您查看np.unique(y_score[:,i]).size不同的i内容,您应该会看到差异。