我必须评估两种分类算法的性能。我从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。不幸的是,fpr
和tpr
对象有不同的大小,因为它们是插值步骤的输出。
你知道怎么做吗?为了使比较可行,我似乎无法向roc_curve
函数说明输出中需要多少点(以及哪些点)。使用滑雪板并不是强制性的。
发布于 2020-06-24 07:51:09
这个解决方案不是专门用于滑雪的,而是一种科学的方法。用蒙特卡罗方法。在一个单位方格内生成10K点,并计算两个ROC曲线下的点的c
表示的数。c/10000
等于这两条曲线的交集面积,因为单位平方的面积是1
。
要在单位方格内生成随机点,可以使用以下代码:
import random
x = random.random()
y = random.random()
通过将(x,y)
添加到xs
和ys
的尾部,并使用以下代码,可以检查0
的点是否在曲线下,其中包含了0
和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
。
请注意,如果增加点数,则方法的精度将提高。
https://stackoverflow.com/questions/62558037
复制相似问题