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

jin*_*ing 5 floating-accuracy threshold keras

binary_accuracy在 keras 度量标准中用于将一个样本预测为正例和负例的阈值是多少?阈值是 0.5 吗?如何调整?我想将阈值设置为0.80,如果预测值为0.79,则认为是负样本?否则?如果预测值为0.81,则认为是正样本。

Ave*_*dis 6

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

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

def binary_accuracy(y_true, y_pred):
    return K.mean(K.equal(y_true, K.round(y_pred)))
Run Code Online (Sandbox Code Playgroud)


ind*_*you 5

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))
Run Code Online (Sandbox Code Playgroud)

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