使用使用keras实现实现Precise, Recall, F1-socre方式方式
实现过程
from keras import backend as K
def Precision(y_true, y_pred):
"""精确率"""
tp= K.sum(K.round(K.clip(y_true * y_pred, 0, 1))) # true positives
pp= K.sum(K.round(K.clip(y_pred, 0, 1))) # predicted positives
precision = tp/ (pp+ K.epsilon())
return precision
def Recall(y_true, y_pred):
"""召回率"""
tp = K.sum(K.round(K.clip(y_true * y_pred, 0, 1))) # true positives
pp = K.sum(K.round(K.clip(y_true, 0, 1))) # possible positives
recall = tp / (pp + K.epsilon())
return recall
def F1(y_true, y_pred):
"""F1-score"""
precision = Precision(y_true, y_pred)
recall = Recall(y_true, y_pred)
f1 = 2 * ((precision * recall) / (precision + recall + K.epsilon()))
return f1
补充知识:补充知识:分类问题的几个评价指标(分类问题的几个评价指标(Precision、、Recall、、F1-Score、、Micro-F1、、Macro-F1))
四个基本概念四个基本概念
TP、True Positive 真阳性:预测为正,实际也为正
FP、False Positive 假阳性:预测为正,实际为负
FN、False Negative 假阴性:预测与负、实际为正
TN、True Negative 真阴性:预测为负、实际也为负。
【一致判真假,预测判阴阳。】
以分类问题为例:(word公式为什么粘不过来??头疼。)
首先看真阳性:真阳性的定义是“预测为正,实际也是正”,这个最好理解,就是指预测正确,是哪个类就被分到哪个类。对类
A而言,TP的个位数为2,对类B而言,TP的个数为2,对类C而言,TP的个数为1。
然后看假阳性,假阳性的定义是“预测为正,实际为负”,就是预测为某个类,但是实际不是。对类A而言,FP个数为0,我们
预测之后,把1和2分给了A,这两个都是正确的,并不存在把不是A类的值分给A的情况。类B的FP是2,”3″和”8″都不是B类,
但却分给了B,所以为假阳性。类C的假阳性个数为2。
最后看一下假阴性,假阴性的定义是“预测为负,实际为正”,对类A而言,FN为2,”3″和”4″分别预测为B和C,但是实际是A,
也就是预测为负,实际为正。对类B而言,FN为1,对类C而言,FN为1。
具体情况看如下表格:
A B C 总计
TP 2 2 1 5
FP 0 2 2 4
FN2 1 1 4
评论0
最新资源