我必须评估两种分类算法的性能。我使用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。不幸的是,fpr
和tpr
对象的大小不同,因为它们是插值步骤的输出
你知道怎么做吗?似乎我不能对roc_curve
函数说我希望在输出中有多少(以及哪些)点,以便使比较可行。使用sklearn不是强制性的
此解决方案不是sklearn特有的,而是一种科学方法。使用蒙特卡罗方法。在单位正方形内生成10K个点,并计算两条ROC曲线下的点的数量,用
c
表示c/10000
等于这两条曲线的相交面积,因为单位正方形的面积为1
要在单位正方形内生成随机点,可以使用以下代码:
ِ您可以通过将
0
添加到xs
和ys
列表的尾部并使用以下代码来检查(x,y)
点是否位于曲线下:在上面的代码中,我们检查了给定的点
(x,y)
应该在曲线的任何一段下。如果是,则在循环末尾is_under
必须是True
,否则必须是False
请注意,如果增加点数,该方法的精度将提高
相关问题 更多 >
编程相关推荐