【问题标题】:How to obtain the TPR and TNR from keras metrics如何从 keras 指标中获取 TPR 和 TNR
【发布时间】:2019-06-26 20:38:48
【问题描述】:

我想获取model.compile()语句中的真阳性率(TPR)和真阴性率(TNR)作为评价指标之一。

我尝试过使用以下代码:

model.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ["accuracy", "tpr", "tnr"])

但是我收到一条错误消息:

未知的度量函数:tpr

我相信它们都是 keras 中的已知指标,所以我不明白这个错误。请帮忙

【问题讨论】:

  • “我相信”是什么意思?他们显然不是keras.io/metrics
  • 对不起,我的错误,我看到这个 github 线程 github.com/gagneurlab/concise/issues/5 并认为这是可能的。我使用了 panda_ml 库中的 ConfusionMatrix,它与您的解决方案非常相似。非常感谢。
  • 不客气

标签: python machine-learning keras


【解决方案1】:

从相关的Keras docs 可以清楚地看出,tprtnr不是原生 Keras 指标的一部分;有一个相关的Github thread,但问题仍然存在。

但是对于您似乎正在处理的二进制情况,从 scikit-learn 获得所需的数量很简单(您需要将模型结果转换为二进制标签,即 not 概率);改编docs中的示例:

from sklearn.metrics import confusion_matrix
y_true = [0, 1, 0, 1]
y_pred = [1, 1, 1, 0]
cm = confusion_matrix(y_true, y_pred) # careful with the order of arguments!
tn, fp, fn, tp = cm.ravel()
(tn, fp, fn, tp)
# (0, 2, 1, 1)

获得这些数量后,现在可以直接计算 TPR 和 TNR(参见 Wikipedia 中的定义):

TPR = tp/(tp+fn)
TPR
# 0.5

TNR = tn/(tn+fp)
TNR
# 0.0

多类案例有点复杂——请参阅我在How to get precision, recall and f-measure from confusion matrix in Python 中的回答。

【讨论】:

    猜你喜欢
    • 2017-12-16
    • 2020-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-04
    • 2020-04-04
    • 2022-11-24
    • 1970-01-01
    相关资源
    最近更新 更多