Dom*_*ack 4 python keras tensorflow
我正在尝试了解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
Run Code Online (Sandbox Code Playgroud)
指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]
...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1453 次 |
最近记录: |