如何使用 scikit-learn 绘制二进制值分数的 ROC 曲线?

How to plot an ROC curve for binary-valued scores using scikit-learn?

我使用下面显示的代码绘制了一个 ROC curve

fpr["micro"], tpr["micro"], _ = roc_curve(y_test.ravel(), y_score.ravel())

plt.plot(fpr["micro"], tpr["micro"],
         label='ROC curve Fold1 (area = %0.2f)' % roc_auc1["micro"])

我想要一个看起来像曲线的图,但是我现在实现的,如下图所示,由两条直线组成:

ROC 曲线是一种将一组 连续值 分数与一组二进制值标签进行比较的方法,方法是对分数应用不同的辨别阈值。

如果您的分数已经是二进制的,则无需应用任何阈值 - 只需通过直接将分数与标签进行比较来计算真阳性率和假阳性率,例如:

tpr = np.mean((y_score == 1) & (y_label == 1))
fpr = np.mean((y_score == 1) & (y_label == 0))

如果您尝试绘制一组二进制分数的 ROC 曲线,您最终会得到一条仅包含三个点的线,因为只有三对可能的 TPR/FPR 值:

  • 如果threshold > 1那么你将每个样本都归类为阴性,因此你的 FPR 和 TPR 都是 0。
  • 如果threshold <= 0那么您将每个样本都归类为阳性,因此您的 TPR 等于标签集中 1 的分数,而 FPR 等于标签中 0 的分数。
  • 如果0 < threshold <= 1那么你的TPR和FPR值等于上面计算的标准TPR和FPR值。

就是这样。