You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在多类别混淆矩阵中单独获取A、N、O类的sensitivity等指标

解决多类别混淆矩阵指标对应问题

当使用sklearn.metrics.multilabel_confusion_matrix计算A、N、O三类的敏感度、特异性和阳性预测值时,若输出包含样本量为0的冗余类别,可通过以下方式明确对应关系:

1. 指定目标类别,过滤冗余结果

multilabel_confusion_matrix默认会包含所有在真实标签或预测标签中出现过的类别,你可以通过labels参数直接指定需要计算的目标类别,避免冗余类别干扰:

from sklearn.metrics import multilabel_confusion_matrix

# 假设已加载真实类别act_class和预测类别pred_class
target_classes = ['A', 'N', 'O']
# 仅计算指定类别的混淆矩阵
confusion_matrices = multilabel_confusion_matrix(act_class, pred_class, labels=target_classes)

此时confusion_matrices会返回3个混淆矩阵,顺序与target_classes中的A、N、O一一对应。

2. 基于混淆矩阵计算指标

每个类别的混淆矩阵为2x2格式,对应[[TN, FP], [FN, TP]],据此计算各项指标:

  • 敏感度(Sensitivity)= TP / (TP + FN)
  • 特异性(Specificity)= TN / (TN + FP)
  • 阳性预测值(Positive Predictivity)= TP / (TP + FP)

完整代码示例:

import numpy as np
from sklearn.metrics import multilabel_confusion_matrix

# 替换为你的真实类别和预测类别数据
act_class = [...]
pred_class = [...]

target_classes = ['A', 'N', 'O']
cm = multilabel_confusion_matrix(act_class, pred_class, labels=target_classes)

def get_class_metrics(cm):
    tn, fp, fn, tp = cm.ravel()
    # 处理分母为0的情况,避免报错
    sensitivity = tp / (tp + fn) if (tp + fn) != 0 else 0.0
    specificity = tn / (tn + fp) if (tn + fp) != 0 else 0.0
    pos_predictivity = tp / (tp + fp) if (tp + fp) != 0 else 0.0
    return sensitivity, specificity, pos_predictivity

# 逐个输出每个类别的指标
for cls_name, mat in zip(target_classes, cm):
    sens, spec, ppv = get_class_metrics(mat)
    print(f"类别 {cls_name}:")
    print(f"  敏感度: {round(sens, 4)}")
    print(f"  特异性: {round(spec, 4)}")
    print(f"  阳性预测值: {round(ppv, 4)}\n")

关键说明

  • 通过labels参数锁定目标类别后,混淆矩阵的顺序与你指定的target_classes完全一致,不会出现冗余类别。
  • 加入分母为0的判断,防止因某类别无真实阳性或预测阳性样本导致的计算错误。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 20:45:28