[英]Calculating Precision and Recall from confusion matrix in python
我有一個2類的混淆矩陣,並以熊貓數據框格式預先計算了總數:
Actual_class Predicted_class_0 Predicted_class_1 Total
0 0 39 73 112
1 1 52 561 613
2 All 91 634 725
我需要使用循環來計算精度和召回率,因為我需要用於更多類的通用案例解決方案。
0級的精度為39/91,而1級的精度為561/634。
類別0的召回率為39/112,類別1的召回為561/613。
所以我需要對角線和總計進行迭代以獲得以下結果
Actual_class Predicted_class_0 Predicted_class_1 Total Precision Recall
0 0 39 73 112 43% 35%
1 1 52 561 613 88% 92%
2 All 91 634 725
總計(“所有行”和“總計”列)將被刪除后綴,因此沒有必要計算它們。
我嘗試了以下代碼,但它不會按對角線方向運行,並且會丟失類0的數據:
cols = [c for c in cross_tab.columns if c.lower()[:4] == 'pred']
for c in cols:
cross_tab["Precision"] = cross_tab[c]/cross_tab[c].iloc[-1]
for c in cols:
cross_tab["Recall"] = cross_tab[c]/cross_tab['Total']
我是熊貓矩陣運算的新手,確實需要您的幫助。
我敢肯定有一種無需預先計算總數的方法。
非常感謝你!!!
我找到了一個使用numpy對角線的解決方案:
import numpy as np
cols = [c for c in cross_tab.columns if c.lower()[:4] == 'pred' or c == 'Total']
denomPrecision=[]
for c in cols:
denomPrecision.append(cross_tab[c].iloc[-1])
diag = np.diagonal(cross_tab.values,1)
cross_tab["Precision"] = np.round(diag.astype(float)/denomPrecision*100,1)
cross_tab["Recall"] = np.round(diag.astype(float)/cross_tab.Total*100,1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.