gpt4 book ai didi

计算灵敏度和特异性的 Pythonic 方法

转载 作者:行者123 更新时间:2023-11-28 20:37:52 27 4
gpt4 key购买 nike

我想计算 2 个 numpy 数组(测试、真相)的灵敏度和特异性。两个数组具有相同的形状,并且仅存储数字 0(测试/真相为假)、1(测试/真相为真)。因此,我必须计算 false_positives、true_positives、false_negative 和 true_negative 值。我是这样做的:

true_positive = 0
false_positive = 0
false_negative = 0
true_negative = 0

for y in range(mask.shape[0]):
for x in range(mask.shape[1]):
if (mask[y,x] == 255 and truth[y,x] == 255):
true_positive = true_positive + 1
elif (mask[y,x] == 255 and truth[y,x] == 0):
false_positive = false_positive + 1
elif (mask[y,x] == 0 and truth[y,x] == 255):
false_negative = false_negative + 1
elif (mask[y,x] == 0 and truth[y,x] == 0):
true_negative = true_negative + 1

sensitivity = true_positive / (true_positive + false_negative)
specificity = true_negative / (false_positive + true_negative)

我认为可能存在更简单(更具可读性)的方法,因为它是 python 而不是 C++ ...首先我尝试了类似的方法:true_positive = np.sum(mask == 255 and truth == 255) 但我得到了这个错误:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

是否有更 pythonic 的方法来计算灵敏度和特异性?

谢谢!

最佳答案

通过支持 NumPy 关注紧凑性 ufunc-vectorized操作,broadcastingarray-slicing , 这是一种方法 -

C = (((mask==255)*2 + (truth==255)).reshape(-1,1) == range(4)).sum(0)
sensitivity, specificity = C[3]/C[1::2].sum(), C[0]/C[::2].sum()

或者,使用 NumPythonic,我们可以用 np.bincount 计数 C -

C = np.bincount(((mask==255)*2 + (truth==255)).ravel())

为了确保我们得到 float 的 pt 数字作为比率,在开始时,我们需要使用:from __future__ import division

关于计算灵敏度和特异性的 Pythonic 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41938613/

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