- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在努力解决 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
最佳答案
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]
...
关于python - tf.keras.metrics.SpecificityAtSensitivity num_thresholds 解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56286350/
我正在努力解决 tf.keras.metrics.SensitivityAtSpecificity .我对孤立的敏感性和特异性概念没有意见,但我不确定这两者在这个单一指标中是如何相关的。 更具体地说,
我是一名优秀的程序员,十分优秀!