You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

多分类混淆矩阵下K-NN模型二类Accuracy计算正确性确认

关于多分类混淆矩阵中类别级Accuracy计算的验证与实现建议

你自学机器学习还手动啃混淆矩阵算指标,这认真劲儿必须点个赞!先给你吃个定心丸:你对A类和B类的Accuracy计算方法完全正确

为什么你的计算逻辑是对的?

在多分类场景下计算单个类别的二分类指标(比如Accuracy),核心思路就是把当前类别当作「正类」,剩下所有类别统一当作「负类」,你对tp、fp、tn、fn的定义完美契合这个规则:

  • tp:该类别被正确分类的样本数(混淆矩阵中对应行对应列的元素)
  • fp:其他类别被错误归类到该类的样本数(对应列中除了tp之外的所有元素之和)
  • fn:该类别被错误分到其他类的样本数(对应行中除了tp之外的所有元素之和)
  • tn:既不属于该类,也没被错误分到该类的样本数(整个混淆矩阵的总样本数减去tp+fp+fn,这个方法比手动加所有元素更不容易出错)

小修正:tn的简化计算

你手动计算tn的时候出现了小失误,比如B类的tn其实应该是总样本数(4768)减去tp(25)+fp(2)+fn(4),也就是4768-31=4737,而不是你算的4752——不过这只是计算失误,核心方法逻辑没问题!

自动化计算的代码实现

为了避免手动计算的误差,你可以用Python结合numpy快速实现所有类别的指标计算,代码如下:

import numpy as np

# 定义你的混淆矩阵
confusion_matrix = np.array([
    [238, 1, 2, 0, 41, 11, 0],
    [0, 25, 0, 0, 3, 1, 0],
    [21, 1, 32, 0, 17, 4, 0],
    [0, 0, 0, 7, 9, 3, 0],
    [7, 0, 0, 0, 3633, 8, 0],
    [44, 0, 4, 1, 397, 256, 1],
    [4, 0, 0, 0, 7, 2, 3]
])
class_names = ['A', 'B', 'C', 'D', 'E', 'F', 'G']

# 定义计算单个类别Accuracy的函数
def calculate_class_accuracy(conf_mat, class_index):
    tp = conf_mat[class_index, class_index]
    # 计算fp:该列所有元素和减去tp
    fp = conf_mat[:, class_index].sum() - tp
    # 计算fn:该行所有元素和减去tp
    fn = conf_mat[class_index, :].sum() - tp
    total_samples = conf_mat.sum()
    tn = total_samples - tp - fp - fn
    accuracy = (tp + tn) / total_samples
    return accuracy

# 遍历所有类别计算并输出结果
for idx, name in enumerate(class_names):
    acc = calculate_class_accuracy(confusion_matrix, idx)
    print(f"{name}类Accuracy: {acc:.2f}")

额外小提示

多分类任务中,大家更常关注Precision(精确率)Recall(召回率)F1-Score这些指标,但如果你确实需要类别级的Accuracy,你的方法完全是标准操作~之前找不到相关资料可能是因为大多数教程更聚焦于宏观/微观/加权的整体指标,但单个类别的二分类转化计算是完全合理的。

内容的提问来源于stack exchange,提问作者Chinmay Nayak

火山引擎 最新活动