这是代码和输出,我认为从输出来看,这意味着当fpr为0,tpr为0时,这是正确的,因为预测结果将所有内容标记为0。
但是输出也说,当fpr为1时,tpr也是1.我认为它不正确,因为预测器永远不会预测某些东西是积极的(标签是$(document).ready(function(){
OpenModel();
});
function OpenModel() {
$("#dialog").dialog({
modal: true,
title: fileName,
width: 600,
height: 600,
buttons: {
Close: function () {
$(this).dialog('close');
}
},
open: function () {
var object = "<object data=\"{FileName}\" type=\"application/pdf\" width=\"700px\" height=\"700px\">";
object += "If you are unable to view file, you can download from <a href = \"{FileName}\">here</a>";
object += "</object>";
object = object.replace(/{FileName}/g, "Doc/Demo.pdf");
$("#dialog").html(object);
}
});
});
),那么怎么可能fpr(=正确预测的#1 /总#1)和tpr(= 1的预测数#/ 0的总数)都是1?
1
输出,
import numpy as np
from sklearn import metrics
y = np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1])
pred = np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
fpr, tpr, thresholds = metrics.roc_curve(y, pred)
print fpr
print tpr
print thresholds
print metrics.auc(fpr, tpr)
答案 0 :(得分:3)
这两个插图可以让您更好地理解如何计算 FPR 和 TPR 。
<强> 案例-1: 强>
y = np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1])
pred = np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
# -^- see the change here
正面肯定= 0
误报= 0
真负值= 9
假阴性= 1
真正正比率,(tpr)=真正正/(正正+假负)
因此, tpr = 0 /(0 + 1)= 0。
误报率,(fpr)=误报/(假阳性+真阴性)
因此, fpr = 0 /(0 + 9)= 0。
#Output:
fpr → [ 0. 1.]
tpr → [ 0. 1.]
<强> 案例-2: 强>
y = np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1])
pred = np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1])
# -^- see the change here
正面肯定= 1
误报= 0
真负值= 9
假阴性= 0
真正正比率,(tpr)=真正正/(正正+假负)
因此, tpr = 1 /(1 + 0)= 1。
误报率,(fpr)=误报/(假阳性+真阴性)
因此, fpr = 0 /(0 + 9)= 0。
#Output:
fpr → [ 0. 1.]
tpr → [ 1. 1.]
注意:
根据roc_curve documentation
,明确指出阈值[0]表示没有预测的实例,并且任意设置为max(pred)+1
。
[这里,二进制分类任务2]
当计算的fpr
和tpr
变为分数且无法量化为0或1时,此变为有效。因此,threshold
从0,1,2变化。
例如,当pred
数组的最后2个值变为1时,您将获得阈值的3个值fpr
,tpr
变为小数值。
但在我们的案例中,fpr
和tpr
都是0或1,因此不需要threshold
的第三个值。
此外,fpr
和tpr
中的数组元素形成递增序列,即从0→1变化并且必须满足形状&gt; = 2.因此,必须同时具有数组中的0和1作为起始值和终值。
包含fpr
和tpr
的小数值,中间列将包含数组两侧的0和1括起来的值。