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

Python分类混淆矩阵指标计算代码无输出问题排查

代码中的错误分析及修正方案

核心错误点

  • 函数代码块未缩进:Python是缩进敏感语言,def err_metric(CM): 声明后,所有属于函数内部的代码必须缩进(通常用4个空格)。当前代码完全没有缩进,会直接触发语法错误,导致代码无法正常解析执行。
  • iloc方法使用逻辑完全错误:iloc是pandas DataFrame的位置索引方法,用于按行/列位置提取数据,但你把TP/FP/FN/TN的数值存在列表A中,试图用CM.iloc[A[0]]提取第100行,这和获取混淆矩阵指标的需求完全不符;同时你未定义CM的类型(是DataFrame还是普通数组),直接调用iloc会触发属性错误。
  • 未调用定义好的函数:代码仅定义了err_metric函数,但从未执行err_metric(...)调用语句,就算函数逻辑正确,也不会触发内部的计算和打印操作,自然没有输出。
  • 冗余导入numpy:代码开头导入了numpy但全程未使用,属于无效代码。
  • 混淆矩阵指标提取逻辑错误:你混淆了“混淆矩阵的索引位置”和“指标数值”,正确逻辑应该是直接传入TP/FP/FN/TN数值,或传入标准2x2混淆矩阵后提取对应位置的数值。

修正后的代码示例

方案1:直接传入TP/FP/FN/TN数值

def err_metric(TP, FP, FN, TN):
    # 添加除零判断,避免运行时错误
    precision = TP / (TP + FP) if (TP + FP) != 0 else 0
    recall = TP / (TP + FN) if (TP + FN) != 0 else 0
    specificity = TN / (TN + FP) if (TN + FP) != 0 else 0
    false_negative_rate = FN / (FN + TP) if (FN + TP) != 0 else 0
    false_positive_rate = FP / (FP + TN) if (FP + TN) != 0 else 0
    accuracy = (TP + TN) / (TP + TN + FP + FN) if (TP + TN + FP + FN) != 0 else 0
    spatial_accuracy = TP / (TP + FN + FP) if (TP + FN + FP) != 0 else 0
    f_measure = 2 * ((precision * recall) / (precision + recall)) if (precision + recall) != 0 else 0

    print("Precision : ", precision)
    print("Recall: ", recall)
    print("Specificity : ", specificity)
    print("False negative rate: ", false_negative_rate)
    print("False positive rate: ", false_positive_rate)
    print("Accuracy: ", accuracy)
    print("Spatial accuracy: ", spatial_accuracy)
    print("F-measure: ", f_measure)

# 调用函数,传入已知数值
err_metric(TP=100, FP=900, FN=0, TN=0)

方案2:传入标准2x2混淆矩阵

def err_metric(confusion_matrix):
    # 从2x2矩阵中提取指标:格式为[[TN, FP], [FN, TP]]
    TN, FP = confusion_matrix[0]
    FN, TP = confusion_matrix[1]
    
    # 带除零判断的指标计算
    precision = TP / (TP + FP) if (TP + FP) != 0 else 0
    recall = TP / (TP + FN) if (TP + FN) != 0 else 0
    specificity = TN / (TN + FP) if (TN + FP) != 0 else 0
    false_negative_rate = FN / (FN + TP) if (FN + TP) != 0 else 0
    false_positive_rate = FP / (FP + TN) if (FP + TN) != 0 else 0
    accuracy = (TP + TN) / (TP + TN + FP + FN) if (TP + TN + FP + FN) != 0 else 0
    spatial_accuracy = TP / (TP + FN + FP) if (TP + FN + FP) != 0 else 0
    f_measure = 2 * ((precision * recall) / (precision + recall)) if (precision + recall) != 0 else 0

    print("Precision : ", precision)
    print("Recall: ", recall)
    print("Specificity : ", specificity)
    print("False negative rate: ", false_negative_rate)
    print("False positive rate: ", false_positive_rate)
    print("Accuracy: ", accuracy)
    print("Spatial accuracy: ", spatial_accuracy)
    print("F-measure: ", f_measure)

# 定义混淆矩阵
cm = [[0, 900], [0, 100]]
err_metric(cm)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 02:05:25