如何基于最优阈值在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
相关产品推荐
相关产品推荐

