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

如何计算假阳性率(FPR)与假阴性率百分比并将向量转为单值?

如何将多分类任务的FPR/FNR向量转换为单个数值?

你得到向量形式的FPR和FNR,本质原因是你当前在处理多分类任务——混淆矩阵是n×n的(n为类别数),代码里计算的是每个类别单独的假阳性率和假阴性率,自然会输出对应每个类别的数值向量。

要得到单个数值,你可以根据业务需求选择以下几种常用的平均方式:

1. 宏平均(Macro-average)

如果你的每个类别样本量相近,且希望每个类别对最终结果的权重相同,直接对所有类别的FPR/FNR取平均值即可:

import numpy as np

# 宏平均FPR
macro_fpr = np.mean(FPR)
# 宏平均FNR
macro_fnr = np.mean(FNR)

print(f"宏平均FPR: {macro_fpr:.4f}")
print(f"宏平均FNR: {macro_fnr:.4f}")

2. 加权平均(Weighted-average)

如果你的数据集存在类别不平衡(某个类别的样本量远大于其他类),可以用每个类别的真实样本数作为权重,让样本多的类别对结果影响更大:

# 每个类别的真实样本总数(混淆矩阵每行的和,即该类别实际的正样本+假阴性样本)
class_true_counts = cnf_matrix.sum(axis=1)

# 加权平均FPR
weighted_fpr = np.average(FPR, weights=class_true_counts)
# 加权平均FNR
weighted_fnr = np.average(FNR, weights=class_true_counts)

print(f"加权平均FPR: {weighted_fpr:.4f}")
print(f"加权平均FNR: {weighted_fnr:.4f}")

3. 微平均(Micro-average)

如果更关注整体样本的错误表现,不单独区分类别,可以把所有类别的TP、FP、FN、TN汇总后再计算整体的FPR和FNR:

# 汇总所有类别的指标
total_fp = np.sum(FP)
total_fn = np.sum(FN)
total_tp = np.sum(TP)
total_tn = np.sum(TN)

# 微平均FPR
micro_fpr = total_fp / (total_fp + total_tn)
# 微平均FNR
micro_fnr = total_fn / (total_fn + total_tp)

print(f"微平均FPR: {micro_fpr:.4f}")
print(f"微平均FNR: {micro_fnr:.4f}")

另外提一句,你代码里有个小笔误:print('Fn: '+str(FN))之后又重复打印了一次print('FN: '+str(FN)),可以修正下避免混淆~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:40:40