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

False Positives(FP)定义、FP率计算及混淆矩阵FP计算疑问

False Positives(FP) 定义、FP率计算及混淆矩阵常见误区

一、FP的定义与FP率计算

  • False Positives(FP,假阳性):实际属于负类的样本,被模型错误预测为正类的数量。这个定义的核心是依赖你指定哪个类别为"正类"。
  • FP率(假阳性率/FPR):公式为 FPR = FP / (FP + TN),代表所有真实负样本中被误判为正样本的比例。

二、你的混淆矩阵案例分析

先明确你提供的混淆矩阵细节:
代码中指定了labels=[1,0],所以混淆矩阵的行对应真实标签,列对应预测标签,结构如下:

预测为1预测为0
真实为1TP=250FN=83
真实为0FP=76TN=311

为什么你认为FP是83?

这是因为你默认把类别0当作了正类:

  • 此时正类是0,那么"假阳性"就是真实为1的样本被误判为0,也就是矩阵中的83。

但如果把类别1当作正类,FP就是真实为0的样本被误判为1,也就是76。

作者代码的逻辑是什么?

作者的代码FP = cm.sum(axis=0) - np.diag(cm),是在同时计算每个类别作为正类时的FP值:

  • cm.sum(axis=0)是按列求和,得到每个预测类别的总样本数;
  • 减去对角线(真实=预测的正确样本数),剩下的就是"其他类别被误判为当前类的数量"——也就是当前类作为正类时的FP。

所以得到的array([76, 83])分别对应:

  • 76:类别1作为正类时的FP(真实0→预测1)
  • 83:类别0作为正类时的FP(真实1→预测0)

后续代码的验证

再看作者的其他代码,逻辑完全对应这个多类别视角:

FN = cm.sum(axis=1) - np.diag(cm)  # 按行求和减对角线,得到每个类作为正类时的FN:[83,76]
TP = np.diag(cm)                   # 每个类作为正类时的TP:[250,311]
TN = cm.sum() - (FP + FN + TP)     # 每个类作为正类时的TN:[311,250]
TPR = TP / (TP + FN)               # 每个类的召回率:[250/(250+83), 311/(311+76)]

三、关于"潜在FP"的解释

你提到的"潜在FP"其实就是指切换正类定义时的假阳性情况。作者的写法没有错误,只是没有局限于传统二分类只指定一个正类的场景,而是同时计算了两个类别作为正类时的所有指标,这种方式在需要对比两类表现时很有用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 02:25:25