基于混淆矩阵计算分类指标:附数学解法与Python脚本
二分类混淆矩阵指标计算:准确率、精确率、召回率、平衡准确率
首先明确二分类混淆矩阵的四个核心元素:
- 真阳性(TP):实际为正类,预测也为正类的样本数
- 真阴性(TN):实际为负类,预测也为负类的样本数
- 假阳性(FP):实际为负类,预测为正类的样本数
- 假阴性(FN):实际为正类,预测为负类的样本数
1. 准确率(Accuracy)
定义:所有预测样本中,分类正确的样本占比
公式:
Accuracy = (TP + TN) / (TP + TN + FP + FN)
计算逻辑:将真阳性和真阴性的样本数相加(即所有分类正确的样本),除以总样本数(四个元素之和)。
2. 精确率(Precision)
定义:被预测为正类的样本中,实际确实是正类的占比
公式:
Precision = TP / (TP + FP)
计算逻辑:真阳性样本数除以所有被预测为正类的样本数(真阳性+假阳性)。
3. 召回率(Recall,又称查全率)
定义:实际为正类的样本中,被正确预测为正类的占比
公式:
Recall = TP / (TP + FN)
计算逻辑:真阳性样本数除以所有实际为正类的样本数(真阳性+假阴性)。
4. 平衡准确率(Balanced Accuracy)
定义:正类召回率与负类召回率的平均值,专门用于应对样本不平衡的场景
首先计算负类召回率(又称特异度Specificity):
Specificity = TN / (TN + FP)
平衡准确率公式:
Balanced Accuracy = (Recall + Specificity) / 2
计算逻辑:分别算出正类和负类的召回率,取两者的算术平均值。
Python 实现脚本
手动计算(无依赖)
直接基于混淆矩阵的四个值计算,适合快速验证:
# 替换为你的实际混淆矩阵数值 TP = 80 TN = 100 FP = 15 FN = 5 # 计算各指标 accuracy = (TP + TN) / (TP + TN + FP + FN) precision = TP / (TP + FP) recall = TP / (TP + FN) specificity = TN / (TN + FP) balanced_accuracy = (recall + specificity) / 2 # 格式化输出结果 print(f"准确率: {accuracy:.4f}") print(f"精确率: {precision:.4f}") print(f"召回率: {recall:.4f}") print(f"平衡准确率: {balanced_accuracy:.4f}")
用scikit-learn库计算(高效便捷)
如果已有真实标签和预测标签数组,可直接调用库函数:
from sklearn.metrics import accuracy_score, precision_score, recall_score, balanced_accuracy_score import numpy as np # 示例:构造真实标签与预测标签数组 # 实际正类85个(TP+FN),负类115个(TN+FP) y_true = np.array([1]*(80+5) + [0]*(100+15)) # 预测正类95个(TP+FP),负类105个(TN+FN) y_pred = np.array([1]*(80+15) + [0]*(100+5)) # 计算指标 accuracy = accuracy_score(y_true, y_pred) precision = precision_score(y_true, y_pred) recall = recall_score(y_true, y_pred) balanced_accuracy = balanced_accuracy_score(y_true, y_pred) print(f"准确率: {accuracy:.4f}") print(f"精确率: {precision:.4f}") print(f"召回率: {recall:.4f}") print(f"平衡准确率: {balanced_accuracy:.4f}")
内容的提问来源于stack exchange,提问作者Vrusti Patel
相关产品推荐
相关产品推荐

