下的代码只有accuracy和miou两个指标,用的tf.contrib.metrics.streaming_
accuracy和_miou函数。由于,我的是二类分割任务,背景面积很大考虑背景不太好,所以我直接把accuracy改成了precision,miou改成了recall,代码运行没有问题,但是precision和recall运行了上千代还是0.1几,这是什么原因???
该方法的核心思想是将多个类别分组,真正关心的类别分为Positive组,其他分为Negative组。例如在命名实体识别任务中,将所有实体的类别分为Positive组,而其他标签’O’单独分为Negative组。下面以多分类的混淆矩阵(confuse matrix)为基础计算Precision、Recall和F1值。
下图是多分类问题的混淆矩阵:
其中,假设类别1和类别2是Positive组,类别3和类别4是Negative组。
那么真正例(TP)可以定义为Positive组预测正确的样本数,那么下图红色框矩阵的对角线和(黄色单元格的和)即为真正例(TP)
即TP=3+2=5
TP+FP表示所有被预测为Positive的样本数,显然下图红框中所有数的和就是TP+FP
即TP+FP=3+3+1+0+4+2+3+2=18
TP+FN表示所有真实为Positive的样本数,显然下图蓝色框中所有数的和就是TP+FN
即TP+FN=3+4+5+1+3+2+4+0=22
因此
Precision=TPTP+FP=518Precision = \frac{TP}{TP+FP} = \frac{5}{18}Precision=TP+FPTP=185
Recall=TPTP+FN=522Recall = \frac{TP}{TP+FN} = \frac{5}{22}Recall=TP+FNTP=225
F1=2PRP+R=14F1 = \frac{2PR}{P+R} = \frac{1}{4}F1=P+R2PR=41