我如何在 Tensorflow 中获得精确度和召回率而不是准确度
Posted
技术标签:
【中文标题】我如何在 Tensorflow 中获得精确度和召回率而不是准确度【英文标题】:How can i get precision & recall instead of accuracy in Tensorflow 【发布时间】:2018-05-24 12:31:21 【问题描述】:我看到垃圾邮件预测将邮件分类为其他人制作的垃圾邮件和非垃圾邮件。
[源代码] https://github.com/nfmcclure/tensorflow_cookbook/blob/master/09_Recurrent_Neural_Networks/02_Implementing_RNN_for_Spam_Prediction/02_implementing_rnn.py
程序产生以下值。 (损失,准确性)
Veiw Result Screenshot
在这段代码中,结果只有loss,accuracy,
我认为准确性没有意义。 我需要 Precision、Recall 值(用于 F1 测量)
但是,由于我的代码分析无法正常工作, 我知道精确度和召回率。 但我不知道如何在这段代码中计算(代码嵌入)Precision 和 Recall。
【问题讨论】:
我不明白你的问题是什么。请尝试重述。 对不起。因为我英语不太好。感谢您的评论。我已经进行了更正,但我不知道这个问题是否可以理解。总之,我想要的是可以输出Precision或Recall的代码。 您的编辑很好。 -1 被移除。 谢谢!!! @EvanWeissburg 【参考方案1】:我自己成功了,万岁!!
代码如下:
actuals = tf.cast(y_output, tf.int64)
predictions = tf.argmax(logits_out, 1)
ones_like_actuals = tf.ones_like(actuals)
zeros_like_actuals = tf.zeros_like(actuals)
ones_like_predictions = tf.ones_like(predictions)
zeros_like_predictions = tf.zeros_like(predictions)
tp_op = tf.reduce_sum(
tf.cast(
tf.logical_and(
tf.equal(actuals, ones_like_actuals),
tf.equal(predictions, ones_like_predictions)
),
"float"
)
)
tn_op = tf.reduce_sum(
tf.cast(
tf.logical_and(
tf.equal(actuals, zeros_like_actuals),
tf.equal(predictions, zeros_like_predictions)
),
"float"
)
)
fp_op = tf.reduce_sum(
tf.cast(
tf.logical_and(
tf.equal(actuals, zeros_like_actuals),
tf.equal(predictions, ones_like_predictions)
),
"float"
)
)
fn_op = tf.reduce_sum(
tf.cast(
tf.logical_and(
tf.equal(actuals, ones_like_actuals),
tf.equal(predictions, zeros_like_predictions)
),
"float"
)
)
我在 github 上看到了混淆矩阵开源 谢谢@Mistobaan ! https://gist.github.com/Mistobaan/337222ac3acbfc00bdac
【讨论】:
很好地回答了您的第一个问题并发布了代码,而不仅仅是链接。您也应该接受自己的答案(这没有错 - 相反,it is encouraged以上是关于我如何在 Tensorflow 中获得精确度和召回率而不是准确度的主要内容,如果未能解决你的问题,请参考以下文章
如何在 scikit-learn 中使用 k 折交叉验证来获得每折的精确召回?