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

2024-06-16 13:22:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须评估两种分类算法的性能。我使用sklearn(here documentation)中的roc_curve获得假阳性率真阳性率。我使用了以下代码:

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对象的大小不同,因为它们是插值步骤的输出

你知道怎么做吗?似乎我不能对roc_curve函数说我希望在输出中有多少(以及哪些)点,以便使比较可行。使用sklearn不是强制性的


Tags: 算法labelsheredocumentation分类sklearn性能曲线
1条回答
网友
1楼 · 发布于 2024-06-16 13:22:58

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

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

import random 

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

ِ您可以通过将0添加到xsys列表的尾部并使用以下代码来检查(x,y)点是否位于曲线下:

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

请注意,如果增加点数,该方法的精度将提高

相关问题 更多 >