python | pycm,一个高级的 Python 库!

本文来源公众号“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 !

文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值