假设标签:a,b,c,d,e
对于标签a:正=a,负=其他(b,c,d,e)
TP:实际=正,预测=正(true positives)
(预测=a 且 实际=a 的个数;a被判定为a)
FP:实际=负,预测=正
(预测=a 情况下,实际=b, c, d, e 的个数;其他被判定为a)
FN:实际=正,预测=负(false negatives)
(实际=a 情况下,预测=b, c, d, e 的个数;a被判定为其他))
TN:实际=负,预测=负
(其他被判定为其他,且正确,如b判定为b)
有14个数据需要预测
序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
实际 y_real | b | b | b | b | b | c | c | c | c | d | d | d | e | e |
预测 y_pred | b | b | b | a | a | c | c | d | d | d | e | d | e | d |
计算: | ||||||||||||||
数量 | a | b | c | d | e | sum | ||||||||
– | – | – | – | – | – | – | ||||||||
TP | 0 | 3 | 2 | 2 | 1 | 8 | ||||||||
FP | 2 | 0 | 0 | 3 | 1 | 6 | ||||||||
FN | 0 | 2 | 2 | 1 | 1 | 6 | ||||||||
TN | ? | ? | ? | ? | ? | ? | ||||||||
注: |
- PN(a)= b判定为b + c判定为c +…= 8(除了a)
- ? FN(a) + TP(a) = 实际a的个数 (y_real)
? TN(a) + FP(a) =实际其他的个数 (y_real),除了a
? FN(a) + TP(a) + TN(a) + FP(a)= 数据总个数 = 14
Precision = TP / (TP + FP) = 8/(8+6)
Recall = TP / (TP + FN) = 8/(8+6)
F1 = 2*(P*R)/(P+R) = …
扩展:
tensorflow 中的混淆矩阵:confusion_matrix,矩阵cm
实际 \ 预测 (数量) | a | b | c | d | e |
---|---|---|---|---|---|
a | 0 | 0 | 0 | 0 | 0 |
b | 2 | 3 | 0 | 0 | 0 |
c | 0 | 0 | 2 | 2 | 0 |
d | 0 | 0 | 0 | 2 | 1 |
e | 0 | 0 | 0 | 1 | 1 |
注: |
- cm[0][0] : 实际=a,预测=a的个数
- cm表格中的总数 = 数据个数 = 14
- TP = 对角线之和
FP = 第一列(除了[a][a])之和+ 第二列(除了[b][b])之和+… = 2+0+0+3+1=6
FN = 第一行(除了[a][a])之和+第二行(除了[b][b])之和+… = 0+2+2+1+1=6
https://www.cnblogs.com/techengin/p/8962024.html
#coding:utf-8
from sklearn.metrics import confusion_matrix
import numpy
# 0,1,2,3,4
# a,b,c,d,e
# b b b b b c c c c d d d e e
y_true = [1,1,1,1,1, 2,2,2,2,3, 3,3,4,4]
# b b b a a c c d d d e d e d
y_pred = [1,1,1,0,0, 2,2,3,3,3, 4,3,4,3]
cm = confusion_matrix(y_true, y_pred,labels=[0,1,2,3,4])
print(cm)
# print(type(cm)) # <class 'numpy.ndarray'>
# if cm = 2*2,即二分类
# TP = cm[0][0]
# FP = cm[0][1]
# FN = cm[1][0]
# TN = cm[1][1]
# tn, fp, fn, tp = cm.ravel()