Precision、Recall、F計算:舉例

假設標籤: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

注:

  1. PN(a)= b判定爲b + c判定爲c +…= 8(除了a)
  2. ? 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

注:
4. cm[0][0] : 實際=a,預測=a的個數
5. cm表格中的總數 = 數據個數 = 14
6. 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()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章