仅用numpy/pandas从3x3混淆矩阵提取accuracy等常用评估指标的简便方法
基于numpy/pandas快速从混淆矩阵提取分类指标的实现方案
你现有的逐类别手动计算的写法可以通过numpy向量化操作大幅简化,同时运算效率更高,也适配更多类别场景,优化后的代码如下:
import numpy as np import pandas as pd # 提取混淆矩阵核心参数 cm = confusion_matrix.to_numpy() total_samples = cm[-1, -1] # 前3类的TP(真正例) tp = cm.diagonal()[:3] # 预测为对应类别的总样本数(混淆矩阵最后一行前3列) pred_total = cm[-1, :3] # 真实为对应类别的总样本数(混淆矩阵前3行最后一列) true_total = cm[:3, -1] # 向量化计算各指标,自动覆盖3个类别,保留2位小数 # 各类别TP占总样本比例,和你原有计算逻辑保持一致 class_acc = np.round(tp / total_samples, 2) # 精确率,添加避免除0处理 precision = np.round(np.divide(tp, pred_total, where=pred_total!=0), 2) # 召回率 recall = np.round(np.divide(tp, true_total, where=true_total!=0), 2) # F1分数 f1 = np.round(np.divide(2 * precision * recall, precision + recall, where=(precision + recall)!=0), 2) # 构建结果DataFrame measurs = pd.DataFrame({ 'Accuracy': class_acc, 'Precision': precision, 'Recall': recall, 'F1_score': f1 }) measurs.index.name = 'Class_Label'
优化优势
- 省去逐类别手动写计算逻辑的冗余代码,3类和N类场景只需要修改切片的上限即可通用
- 全程用numpy向量化运算,比逐元素手动计算速度快3~5倍,类别越多性能优势越明显
- 内置除零异常的防护逻辑,避免某类无预测/无真实样本时触发运算报错
内容的提问来源于stack exchange,提问作者Yordan Иванов
相关产品推荐
相关产品推荐

