【发布时间】:2017-01-31 00:06:34
【问题描述】:
我想计算 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:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()
有没有更 Pythonic 的方法来计算敏感性和特异性?
谢谢!
【问题讨论】:
-
您可能有兴趣检查 scikit-learn sklearn.metrics 它有大量的指标可供选择 scikit-learn.org/stable/modules/…