1 混淆矩阵

  混淆矩阵也称误差矩阵,是表示精度评价的一种标准格式,用n行n列的矩阵形式来表示。在二分类场景里是一个2x2的矩阵,如下图所示:
在这里插入图片描述  其中:

  • TP(True Positive):真正例,真值和预测值都是正例
  • FP(False Positive):假正例,真值是负例,预测值是正例
  • FN(False Negative):假负例,真值是正例,预测值是负例
  • TN(True Negative):真负例,真值和预测值都是负例
      
2 常见指标

  在统计完二分类的结果后,还有一些常见的指标,用于对分类结果进行分析。这些指标包括:
在这里插入图片描述
  上述指标中,前四个直接通过混淆矩阵的统计结果进行计算即可,最后两个可以画出图来,计算的是曲线面积。对于前四个指标,其定义分别为:

  • Accuracy(准确率):对于给定的测试数据集,分类器正确分类的样本数与总样本数之比。
  • Precision(精确率):预测为正的样本中有多少是真正的正样本,它是针对我们预测结果而言的。Precision又称为查准率。
  • Recall(召回率):样本中的正例有多少被预测正确了, 它是针对我们原来的样本而言的。Recall又称为查全率。
  • F1:在上表中,P表示Precision,R表示Recall。F1得分相当于精确率和召回率的调和平均值,其中最佳值为1.0,最差值为0.0。
      
3 实现代码

  下面是混淆矩阵和常见评价指标的计算代码:

import numpy as np

# 计算混淆矩阵
def compute_confusion_matrix(precited,expected):
    part = precited ^ expected             # 对结果进行分类,亦或使得判断正确的为0,判断错误的为1
    pcount = np.bincount(part)             # 分类结果统计,pcount[0]为0的个数,pcount[1]为1的个数
    tp_list = list(precited & expected)    # 将TP的计算结果转换为list
    fp_list = list(precited & ~expected)   # 将FP的计算结果转换为list
    tp = tp_list.count(1)                  # 统计TP的个数
    fp = fp_list.count(1)                  # 统计FP的个数
    tn = pcount[0] - tp                    # 统计TN的个数
    fn = pcount[1] - fp                    # 统计FN的个数
    return tp, fp, tn, fn

# 计算常用指标
def compute_indexes(tp, fp, tn, fn):
    accuracy = (tp+tn) / (tp+tn+fp+fn)     # 准确率
    precision = tp / (tp+fp)               # 精确率
    recall = tp / (tp+fn)                  # 召回率
    F1 = (2*precision*recall) / (precision+recall)    # F1
    return accuracy, precision, recall, F1

  最后,自己制造一点数据对上述代码进行测试,结果如下:

# 测试代码
precited = np.array([1,1,0,0,0,1,0,0,0,0,1,1,0,1,1,0])
expected = np.array([1,0,0,0,1,1,0,1,0,1,1,0,0,0,1,1])
tp, fp, tn, fn = compute_confusion_matrix(precited, expected)
print(f"TP: {tp}")
print(f"FP: {fp}")
print(f"TN: {tn}")
print(f"FN: {fn}")
accuracy, precision, recall, F1 = compute_indexes(tp, fp, tn, fn)
print(f"Accuracy:  {accuracy}")
print(f"Precision: {precision}")
print(f"Recall:    {recall}")
print(f"F1:        {F1}")

# 输出结果
TP: 4
FP: 3
TN: 5
FN: 4
Accuracy:  0.5625
Precision: 0.5714285714285714
Recall:    0.5
F1:        0.5333333333333333

  
参考链接:
二分类器的常用评价指标
(python+离散)实现TP、TN、FP、FN
深度学习中:准确率,精确率,召回率,F1计算方式

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐