Python tf.keras.metrics.SpecificityAtensitivity num_阈值解释

Python tf.keras.metrics.SpecificityAtensitivity num_阈值解释,python,tensorflow,keras,Python,Tensorflow,Keras,我正试着清醒过来。我对敏感度和特异性的概念很满意,但我不确定这两个概念在这个单一指标中是如何关联的 更具体地说,我不确定如何解释num\u thresholds参数。文档中的示例具有num\u thresholds=1。使用相同的输入数据将num_阈值设置为大于1似乎总是返回1.0的度量值 def打印度量值(num\u阈值): #基于文档示例的其他值 m=tf.keras.metrics.sensitivityatspecification( 0.4,num_阈值=num_阈值) m、 更新_状

我正试着清醒过来。我对敏感度和特异性的概念很满意,但我不确定这两个概念在这个单一指标中是如何关联的

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

def打印度量值(num\u阈值):
#基于文档示例的其他值
m=tf.keras.metrics.sensitivityatspecification(
0.4,num_阈值=num_阈值)
m、 更新_状态([0,0,1,1],[0,0.5,0.3,0.9])
打印('num_阈值为%d的结果:%.1f'%
(num_阈值,m.result().numpy())
打印度量值(1)#0.5-与文档相同
打印度量值(2)#1.0
打印度量值(200)#1.0

数值阈值是指阈值的数量。但你可能会问:什么是门槛(在这种情况下)?答案是阈值,在[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

现在假设您希望以固定的灵敏度监控特异性的变化。
sensitivityatspecification
metric的作用是,为了计算灵敏度的值,它首先计算不同阈值的特异性,然后选择与您提供的特异性值最接近的阈值(例如,在你的问题中,你给出了
0.4
作为特异性值)。然后在该阈值处计算灵敏度,并将其作为该指标的值返回。同样的情况也适用于
SpecificityAtSensitivity
指标,只需在本段中交换“特异性”和“敏感性”

您可能还会问:阈值是什么?答案是如果
num\u thresholds=1
那么唯一的阈值是0.5。如果
num\u 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]
...

相关:这正是我想要的答案。结果表明,我的数据导致了模糊的阈值-在(0,0.5)中的任何内容都给出了0.5的特异性(最接近0.4的可能值),但灵敏度值在0.3时发生了显著变化。最后一个问题:我得出的
SpecitivityAtSensitivity(任何内容,num_thresholds=1)的结论是否正确
相当于
特异性(0.5)
?@DomJack抱歉,我不明白你所说的
特异性(0.5)
(我在TF中找不到这样的指标!)。特异性敏感度(任意值,num\u阈值=1)
相当于在阈值0.5处返回特异性值,因为这是我们考虑的唯一阈值。我只是假设它存在,猜测不是:)。再次感谢。