gpt4 book ai didi

python - scikit 学习 auc 函数的一些错误?

转载 作者:太空宇宙 更新时间:2023-11-04 00:46:46 24 4
gpt4 key购买 nike

这是代码和输出,我认为从输出来看,这意味着当 fpr 为 0,tpr 为 0,这是正确的,因为预测结果标记为 0。

但输出还说,当 fpr 为 1 时,tpr 也为 1。我认为这是不正确的,因为预测器从不预测某些东西是正的(标签为 1),所以fpr(= 1 的正确预测数/1 的总数)和 tpr(= 1 的预测数/0 的总数)怎么可能都为 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.  1.]
[ 0. 1.]
[1 0]
0.5

最佳答案

这两个插图可以让您更好地理解 FPRTPR 是如何计算的。

案例 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 ,明确指出 thresholds[0] 表示没有实例被预测,任意设置为 max(pred)+1。[此处,2 用于二元分类任务]

fprtpr 计算后变成分数,无法量化为0 或1 时,这就有效。因此,threshold从 0、1、2 变化。例如,当 pred 数组的最后 2 个值变为 1 时,您将获得 3 个阈值,因为 fprtpr 变为分数值。

但在我们的例子中,fprtpr 都是 0 或 1,因此不需要 的第三个值阈值

另外,fprtpr中的数组元素都是递增序列,即从0→1变化,必须满足一个>=2的形状。因此,它数组中必须同时包含 0 和 1 作为起始值和终止值。

对于 fprtpr 的小数值,中间列将包含数组两侧用 0 和 1 括起来的这些值。

关于python - scikit 学习 auc 函数的一些错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39220293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com