tf.keras.metrics.SpecificityAtSensitivity num_thresholds解释

时间:2019-05-24 05:29:10

标签: python tensorflow keras

我正在努力tf.keras.metrics.SensitivityAtSpecificity。我对隔离中的敏感性和特异性的概念很好,但是我不确定这两个度量标准之间的关系。

更具体地说,我不确定如何解释num_thresholds参数。文档中的示例包含num_thresholds=1。使用相同的输入数据将num_thresholds设置为大于1似乎总是返回度量标准值1.0。

def print_metric_value(num_thresholds):
    # other values based on docs example
    m = tf.keras.metrics.SensitivityAtSpecificity(
        0.4, num_thresholds=num_thresholds)
    m.update_state([0, 0, 1, 1], [0, 0.5, 0.3, 0.9])
    print('Result with num_thresholds = %d: %.1f' %
          (num_thresholds, m.result().numpy()))

print_metric_value(1)    # 0.5 - same as docs
print_metric_value(2)    # 1.0
print_metric_value(200)  # 1.0

1 个答案:

答案 0 :(得分:1)

num_thresholds是指阈值的数量。但是您可能会问:什么是阈值(在这种情况下)?答案是,在[0,1]范围内的阈值实际上是一个值,所有大于该值的预测都将被视为正值(即1),而所有低于该值的预测都将被视为负数(即0)。

例如,将预测向量视为[0, 0.5, 0.3, 0.9],它实际上是置信度得分(例如概率)。现在,如果我们应用阈值0.1,我们将得到[0, 1, 1, 1];或者如果我们应用阈值0.6,则会得到[0, 0, 0, 1](即,只有最后一次预测的可信度高于0.6)。

现在,假设您要以固定的灵敏度监视特异性的变化。 SensitivityAtSpecificity指标的作用是,要计算灵敏度值,它将首先计算不同阈值下的特异性,然后选择与您提供的特异性值(例如,在您的您给0.4作为特异性值的问题)。然后,以该阈值计算灵敏度,并将其作为该度量的值返回。同样的情况适用于SpecificityAtSensitivity指标,只需在本段中交换“特异性”和“敏感性”即可。

您可能还会问:阈值是多少?答案是如果num_thresholds=1,则唯一的阈值为0.5。如果num_thresholds > 1,则除0和1作为阈值外,间隔(0,1)将被拆分为num_thresholds - 1个相等的子间隔,并选择拆分点作为附加阈值。例如:

num_threshold  |  thresholds
=============================
1              | [0.5]
2              | [0, 1]
3              | [0, 0.5, 1]
4              | [0, 0.33, 0.66, 1]
5              | [0, 0.25, 0.5, 0.75, 1]
...