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 | |
|---|---|---|
| 真实为1 | TP=250 | FN=83 |
| 真实为0 | FP=76 | TN=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
相关产品推荐
相关产品推荐

