我想为多类分类问题计算准确度、查准率和召回率,以及F1评分.我正在使用下面提到的这些代码行。
from keras import backend as K
def precision(y_true, y_pred, average='None'):
true_positives = K.sum(K.round(K.clip(y_true * y_pred, 0, 1)))
predicted_positives = K.sum(K.round(K.clip(y_pred, 0, 1)))
precision = true_positives / (predicted_positives + K.epsilon())
return precision
def recall(y_true, y_pred, average='micro'):
true_positives = K.sum(K.round(K.clip(y_true * y_pred, 0, 1)))
possible_positives = K.sum(K.round(K.clip(y_true, 0, 1)))
recall = true_positives / (possible_positives + K.epsilon())
return recall
def f1(y_true, y_pred, average='weighted'):
def recall(y_true, y_pred):
true_positives = K.sum(K.round(K.clip(y_true * y_pred, 0, 1)))
possible_positives = K.sum(K.round(K.clip(y_true, 0, 1)))
recall = true_positives / (possible_positives + K.epsilon())
return recall
def precision(y_true, y_pred):
true_positives = K.sum(K.round(K.clip(y_true * y_pred, 0, 1)))
predicted_positives = K.sum(K.round(K.clip(y_pred, 0, 1)))
precision = true_positives / (predicted_positives + K.epsilon())
return precision
precision = precision(y_true, y_pred)
recall = recall(y_true, y_pred)
return 2 * ((precision * recall) / (precision + recall + K.epsilon()))不知道为什么回忆的价值是1同时用于测试和培训。请帮助我计算精度,精度和召回,和F1评分的多类分类使用Keras模型。
发布于 2019-11-13 15:53:30
如果您想为每个类计算这个值,那么:
def recall(y_true, y_pred,class_to_analyse):
pred = K.argmax(y_pred)
true = K.argmax(y_true)
p = K.cast(K.equal(pred,class_to_analyse),'int32')
t = K.cast(K.equal(true,class_to_analyse),'int32')
# Compute the true positive
common = K.sum(K.dot(K.reshape(t,(1,-1)),K.reshape(p,(-1,1))))
# divide by all positives in t
recall = common/ (K.sum(t) + K.epsilon)
return recall
def precision(y_true, y_pred,class_to_analyse):
pred = K.argmax(y_pred)
true = K.argmax(y_true)
p = K.cast(K.equal(pred,class_to_analyse),'int32')
t = K.cast(K.equal(true,class_to_analyse),'int32')
# Compute the true positive
common = K.sum(K.dot(K.reshape(t,(1,-1)),K.reshape(p,(-1,1))))
# divide by all positives in t
precision = common/ (K.sum(p) + K.epsilon)
return precision
def fbeta(y_true, y_pred,class_to_analyse):
beta = 1 # for f1 score
precision = precision(y_true, y_pred,class_to_analyse)
recall = recall(y_true, y_pred,class_to_analyse)
beta_squared = beta ** 2
return (beta_squared + 1) * (precision * recall) / (beta_squared * precision + recall)要使其工作,您需要创建一个带有固定类的函数列表(例如:recall_1(y_true, y_pred) = recall(y_true, y_pred,class_to_analyse = 1) )。
https://datascience.stackexchange.com/questions/63012
复制相似问题