[英]How to pairwise compare two ROC curve using sklearn?
我必须评估两种分类算法的性能。 我使用来自 sklearn 的roc_curve
获得了假阳性率和真阳性率( here documentation )。 我使用了以下代码:
fpr = dict()
tpr = dict()
roc_auc = dict()
for i in range(2):
fpr[i], tpr[i], _ = roc_curve(true_labels, pred_labels)
roc_auc[i] = auc(fpr[i], tpr[i])
我有两个分类器的这些信息,现在我想比较它们。 我知道可以使用 AUC 或其他指标,但我真的很想了解 ROC 曲线超过另一条曲线的次数百分比。 出于这个原因,我想比较两条曲线的成对点。
我的第一个想法是比较每个fpr元素对应的tpr 。 不幸的是, fpr
和tpr
对象的大小不同,因为它们是插值步骤的 output。
关于如何做到这一点的任何想法? 为了使比较可行,我似乎无法对roc_curve
function 说我想要在 output 中有多少(以及哪些)点。 使用 sklearn 不是强制性的。
此解决方案并非特定于 sklearn,而是一种科学方法。 使用蒙特卡罗方法。 在一个单位正方形内生成 10K 个点,并计算两条 ROC 曲线下的点数,由c
表示。 c/10000
等于这两条曲线的交点面积,因为单位正方形的面积为1
。
要在单位正方形内生成随机点,可以使用以下代码:
import random
x = random.random()
y = random.random()
ِ您可以通过在xs
和ys
的尾部添加0
并使用以下代码来检查(x,y)
的点是否在具有 xs 和 ys 列表的曲线下方:
is_under = True
for i in range(1, len(xs)): # 0 is added to the tails of xs and ys
m = (y[1] - y[0])/(x[1]-x[0])
if y > m * (x - x[0]) + y[0]:
is_under = False
break
在上面的代码中,我们检查了给定点(x,y)
是否应该在曲线的任何段下方。 如果是,则在循环结束时is_under
必须为True
,否则必须为False
。
请注意,如果增加点数,方法的精度将会提高。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.