如何使用 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值。
就是这样。
我使用下面显示的代码绘制了一个 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值。
就是这样。