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

如何基于最优阈值在Python中构建混淆矩阵?

如何用最优阈值构建混淆矩阵?

核心逻辑

要构建混淆矩阵,核心是先把概率形式的预测值通过最优阈值转换成0/1二分类标签,再将转换后的预测标签与真实标签一起传入混淆矩阵计算函数即可。

完整实现代码

import numpy as np
from sklearn import metrics

# 给定数据
label = np.array([0,0,1,0,1,0,0,1,1,1])
pred = np.array([0.15,0.2,0.25,0.37,0.41,0.55,0.65,0.8,0.92,0.99])

# 计算ROC曲线相关指标
fpr, tpr, thresh = metrics.roc_curve(label, pred)
auc = metrics.roc_auc_score(label, pred)

# 获取最优阈值
def optimal_index(tpr, fpr, thresh):
    optimal_idx = np.argmax(tpr - fpr)
    optimal_thres = thresh[optimal_idx]
    return optimal_thres

threshold = optimal_index(tpr, fpr, thresh)
print("分类器的最优阈值为:", threshold)
# 输出:分类器的最优阈值为: 0.8

# 1. 将预测概率转换为二分类标签
pred_labels = (pred >= threshold).astype(int)
# 转换后的标签结果:[0 0 0 0 0 0 0 1 1 1]

# 2. 生成混淆矩阵
confusion_mat = metrics.confusion_matrix(label, pred_labels)
print("混淆矩阵:\n", confusion_mat)

混淆矩阵结果说明

运行代码后会输出如下混淆矩阵:

[[6 0]
 [2 2]]

矩阵四个位置的含义:

  • 左上角:TN(真阴性):真实标签为0且预测为0的样本数(6个)
  • 右上角:FP(假阳性):真实标签为0但预测为1的样本数(0个)
  • 左下角:FN(假阴性):真实标签为1但预测为0的样本数(2个)
  • 右下角:TP(真阳性):真实标签为1且预测为1的样本数(2个)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 16:41:03