繁体   English   中英

如何使用sklearn成对比较两条ROC曲线?

[英]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 不幸的是, fprtpr对象的大小不同,因为它们是插值步骤的 output。

关于如何做到这一点的任何想法? 为了使比较可行,我似乎无法对roc_curve function 说我想要在 output 中有多少(以及哪些)点。 使用 sklearn 不是强制性的。

此解决方案并非特定于 sklearn,而是一种科学方法。 使用蒙特卡罗方法。 在一个单位正方形内生成 10K 个点,并计算两条 ROC 曲线下的点数,由c表示。 c/10000等于这两条曲线的交点面积,因为单位正方形的面积为1

要在单位正方形内生成随机点,可以使用以下代码:

import random 

x = random.random()
y = random.random()

ِ您可以通过在xsys的尾部添加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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM