二分类结果评价之TP、FP、TN、FN及准确率、精确率、召回率、F1得分的计算方式和python代码实现

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计算方式

  • 18
    点赞
  • 101
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zeeq_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值