本文来源公众号“python”,仅用于学术分享,侵权删,干货满满。
原文链接:https://mp.weixin.qq.com/s/rA6rPTOXvmPJfaGg5iFF0Q
在机器学习和深度学习领域,模型评估是至关重要的环节。混淆矩阵作为分类模型评估的核心工具,能够直观展示模型的预测性能。pycm(Python Confusion Matrix)是一个功能强大的Python库,专门用于多分类混淆矩阵的计算和分析。它支持计算超过100种统计指标,包括准确率、精确率、召回率、F1分数等,同时提供丰富的可视化和导出功能,是数据科学家和机器学习工程师进行模型评估的得力助手。
安装
1、安装方法
使用pip命令即可快速安装:
pip install pycm
2、验证安装
安装完成后,在Python环境中运行以下代码验证:
from pycm import ConfusionMatrix
actual = [1, 1, 2, 2, 3, 3]
predict = [1, 2, 2, 3, 3, 3]
cm = ConfusionMatrix(actual_vector=actual, predict_vector=predict)
print(cm)
如果正常输出混淆矩阵信息,说明安装成功。
核心特性
-
指标丰富:支持计算100+种分类评估指标
-
多分类支持:完美支持二分类和多分类场景
-
多种输入方式:支持向量输入和矩阵直接输入
-
导出灵活:支持导出为HTML、CSV、JSON等多种格式
-
可视化友好:内置混淆矩阵可视化功能
-
无依赖限制:核心功能无需额外依赖库
基本功能
1、创建混淆矩阵
pycm提供了简洁的方式来创建混淆矩阵。只需传入实际标签和预测标签两个向量,即可自动计算出完整的混淆矩阵。
from pycm import ConfusionMatrix
# 实际标签
actual = [0, 0, 0, 1, 1, 1, 2, 2, 2]
# 预测标签
predict = [0, 0, 1, 1, 1, 0, 2, 2, 1]
# 创建混淆矩阵
cm = ConfusionMatrix(actual_vector=actual, predict_vector=predict)
# 打印混淆矩阵
print(cm.matrix)
# 输出: {0: {0: 2, 1: 1, 2: 0}, 1: {0: 1, 1: 2, 2: 0}, 2: {0: 0, 1: 1, 2: 2}}
2、获取整体评估指标
在模型评估中,需要从整体角度了解模型的性能表现。pycm提供了overall_stat属性,包含了准确率、Kappa系数、宏平均F1等全局指标。
from pycm import ConfusionMatrix
actual = [0, 0, 0, 1, 1, 1, 2, 2, 2]
predict = [0, 0, 1, 1, 1, 0, 2, 2, 1]
cm = ConfusionMatrix(actual_vector=actual, predict_vector=predict)
# 获取整体统计指标
print(f"整体准确率: {cm.overall_stat['Overall ACC']}")
print(f"Kappa系数: {cm.overall_stat['Kappa']}")
print(f"宏平均F1: {cm.overall_stat['F1 Macro']}")
3、获取各类别评估指标
除了整体指标外,了解每个类别的分类表现同样重要。pycm的class_stat属性提供了每个类别的精确率、召回率、F1分数等详细指标,便于我们发现模型在特定类别上的不足之处。
from pycm import ConfusionMatrix
actual = [0, 0, 0, 1, 1, 1, 2, 2, 2]
predict = [0, 0, 1, 1, 1, 0, 2, 2, 1]
cm = ConfusionMatrix(actual_vector=actual, predict_vector=predict)
# 获取各类别指标
for cls in cm.classes:
print(f"类别 {cls}:")
print(f" 精确率(PPV): {cm.class_stat['PPV'][cls]}")
print(f" 召回率(TPR): {cm.class_stat['TPR'][cls]}")
print(f" F1分数: {cm.class_stat['F1'][cls]}")
高级功能
1、从矩阵直接创建
在某些场景下,可能已经拥有计算好的混淆矩阵数据,而非原始的标签向量,pycm支持直接从矩阵字典创建ConfusionMatrix对象。
from pycm import ConfusionMatrix
# 直接从矩阵创建
matrix_data = {
"Class1": {"Class1": 50, "Class2": 5, "Class3": 2},
"Class2": {"Class1": 3, "Class2": 45, "Class3": 4},
"Class3": {"Class1": 1, "Class2": 6, "Class3": 48}
}
cm = ConfusionMatrix(matrix=matrix_data)
print(f"整体准确率: {cm.overall_stat['Overall ACC']}")
2、结果导出
pycm支持将分析结果导出为多种格式,方便后续的报告编写和数据存档。
from pycm import ConfusionMatrix
actual = [0, 0, 0, 1, 1, 1, 2, 2, 2]
predict = [0, 0, 1, 1, 1, 0, 2, 2, 1]
cm = ConfusionMatrix(actual_vector=actual, predict_vector=predict)
# 导出为HTML文件
cm.save_html("confusion_matrix_report")
# 导出为CSV文件
cm.save_csv("confusion_matrix_data")
# 导出为JSON文件
cm.save_json("confusion_matrix_json")
3、概率向量支持
在实际应用中,分类模型通常输出的是概率分布而非直接的类别标签,pycm支持接收概率向量作为输入,自动选取最大概率对应的类别作为预测结果,简化了评估流程。
from pycm import ConfusionMatrix
actual = [0, 1, 2, 0, 1, 2]
# 概率预测结果 [类别0概率, 类别1概率, 类别2概率]
prob_predict = [
[0.8, 0.1, 0.1],
[0.2, 0.7, 0.1],
[0.1, 0.2, 0.7],
[0.6, 0.3, 0.1],
[0.3, 0.5, 0.2],
[0.1, 0.3, 0.6]
]
cm = ConfusionMatrix(actual_vector=actual, predict_vector=prob_predict)
print(cm.matrix)
实际应用场景
1、图像分类模型评估
在计算机视觉项目中,图像分类是最常见的任务之一,使用pycm可以全面评估图像分类模型的性能,快速定位模型在哪些类别上存在混淆问题。
from pycm import ConfusionMatrix
# 模拟图像分类结果
categories = ["cat", "dog", "bird"]
actual = ["cat", "cat", "dog", "dog", "bird", "bird", "cat", "dog"]
predict = ["cat", "dog", "dog", "dog", "bird", "cat", "cat", "bird"]
cm = ConfusionMatrix(actual_vector=actual, predict_vector=predict)
# 输出分类报告
print("=== 图像分类模型评估报告 ===")
print(f"整体准确率: {cm.overall_stat['Overall ACC']:.2%}")
print(f"宏平均精确率: {cm.overall_stat['PPV Macro']:.4f}")
print(f"宏平均召回率: {cm.overall_stat['TPR Macro']:.4f}")
# 找出最容易混淆的类别
for cls in categories:
print(f"{cls} 的F1分数: {cm.class_stat['F1'][cls]:.4f}")
2、多模型性能对比
在模型选型阶段,需要对比多个候选模型的性能,pycm提供了compare方法,可以方便地将多个混淆矩阵进行对比分析,帮助选择最优模型。
from pycm import ConfusionMatrix, Compare
actual = [0, 0, 1, 1, 2, 2, 0, 1, 2]
# 模型A的预测
predict_a = [0, 0, 1, 0, 2, 2, 0, 1, 1]
# 模型B的预测
predict_b = [0, 1, 1, 1, 2, 2, 1, 1, 2]
cm_a = ConfusionMatrix(actual_vector=actual, predict_vector=predict_a)
cm_b = ConfusionMatrix(actual_vector=actual, predict_vector=predict_b)
# 对比两个模型
print(f"模型A准确率: {cm_a.overall_stat['Overall ACC']:.2%}")
print(f"模型B准确率: {cm_b.overall_stat['Overall ACC']:.2%}")
print(f"模型A Kappa: {cm_a.overall_stat['Kappa']:.4f}")
print(f"模型B Kappa: {cm_b.overall_stat['Kappa']:.4f}")
总结
pycm是一个功能全面的混淆矩阵分析库,为机器学习模型评估提供了强大的工具支持。本文介绍了pycm的安装配置、核心特性以及基础和高级功能的使用方法,并通过图像分类评估和多模型对比两个实际案例展示了其应用价值。pycm支持100多种评估指标的计算,能够满足从简单二分类到复杂多分类的各种评估需求。无论是日常的模型调优,还是正式的模型验收报告,pycm都能提供专业、全面的分析支持。
THE END !
文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。

978

被折叠的 条评论
为什么被折叠?



