簡體   English   中英

從Python中的混淆矩陣計算精度和召回率

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM