keras Metrices中的binary_accuracy,将一个样本预测为正面和负面情况的阈值是多少

时间:2017-01-14 14:22:33

标签: keras floating-accuracy threshold

keras Metrices中binary_accuracy的阈值用于预测一个样本为正面和负面情况?是阈值0.5?怎么调整呢?我想设置阈值0.80,如果预测值是0.79,那么它被认为是负样本,否则,如果预测值是0.81,那么它被认为是正样本。

3 个答案:

答案 0 :(得分:2)

binary_accuracy没有阈值参数,但您可以自己轻松定义一个。

import keras
from keras import backend as K

def threshold_binary_accuracy(y_true, y_pred):
    threshold = 0.80
    if K.backend() == 'tensorflow':
        return K.mean(K.equal(y_true, K.tf.cast(K.lesser(y_pred,threshold), y_true.dtype)))
    else:
        return K.mean(K.equal(y_true, K.lesser(y_pred,threshold)))

a_pred = K.variable([.1, .2, .6, .79, .8, .9])
a_true = K.variable([0., 0., 0.,  0., 1., 1.])

print K.eval(keras.metrics.binary_accuracy(a_true, a_pred))
print K.eval(threshold_binary_accuracy(a_true, a_pred))

现在您可以将其用作metrics=[threshold_binary_accuracy]

答案 1 :(得分:1)

要回答最初的问题,keras使用round函数来分配类,因此阈值为0.5。

https://github.com/fchollet/keras/blob/master/keras/metrics.py

def binary_accuracy(y_true,y_pred):     返回K.mean(K.equal(y_true,K.round(y_pred)))

答案 2 :(得分:1)

即使更快,如果您使用tf 2,也可以使用:tf.keras.metrics.BinaryAccuracy(),它具有一个内部threshold参数,您可以设置