1. 程式人生 > >基於混淆矩陣計算多分類的準確率和召回率

基於混淆矩陣計算多分類的準確率和召回率

定義

TP-將正類預測為正類

FN-將正類預測為負類

FP-將負類預測位正類

TN-將負類預測位負類

準確率(正確率)=所有預測正確的樣本/總的樣本 (TP+TN)/總

精確率= 將正類預測為正類 / 所有預測為正類 TP/(TP+FP)

召回率 = 將正類預測為正類 / 所有正真的正類 TP/(TP+FN)

多分類下計算

應用多分類問題,把每個類別單獨視為”正“,所有其它型別視為”負“,考慮如下的混淆矩陣:
M = [
[14371, 6500, 9, 0, 0, 2, 316],
[5700, 22205, 454, 20, 0, 11, 23],
[0, 445, 3115, 71, 0, 11, 0],
[0, 0, 160, 112, 0, 0, 0],
[0, 888, 39, 2, 0, 0, 0],
[0, 486, 1196, 30, 0, 74, 0],
[1139, 35, 0, 0, 0, 0, 865]
]
分別計算各個類別的精確率與召回率:

n = len(M)
for i in range(len(M[0])):
    rowsum, colsum = sum(M[i]), sum(M[r][i] for r in range(n))
    try:
        print 'precision: %s' % (M[i][i]/float(colsum)), 'recall: %s' % (M[i][i]/float(rowsum))
    except ZeroDivisionError:
        print 'precision: %s' % 0, 'recall: %s' %0

參考

https://www.zhihu.com/question/56403549/answer/151310817