• 一文带你搞懂sklearn.metrics混淆矩阵


    一般的二分类任务需要的评价指标有4个

    • accuracy
    • precision
    • recall
    • f1-score

    四个指标的计算公式如下

    accuracy = \frac{TP+TN}{TP+TN+FP+FN}

    precision=\frac{TP}{TP+FP}

    recall=\frac{TP}{TP+FN}

     F_1-score=\frac{2*precision*recall}{precision+recall}

    计算这些指标要涉及到下面这四个概念,而它们又构成了混淆矩阵

    • TP (True Positive)
    • FP (False Positive)
    • TN (True Negative)
    • FN (False Negative)
    混淆矩阵预测值
    01
    实际值0TNFP
    1FNTP

    这里我给出的混淆矩阵是按照sklearn-metrics-confusion_matrix的形式绘制的。

    Negative中文译作阴性,一般指标签0;Positive中文译作阳性,一般指标签1。

    True中文译作预测正确;False中文译作预测错误。

    TN  预测正确(True)并且预测值为阴性(Negative)即实际值和预测值均为0

    TP  预测正确(True)并且预测值为阳性(Positive)即实际值和预测值均为1

    FN  预测错误(False)并且预测值为阴性(Negative)即实际值为1,预测值为0

    FP  预测错误(False)并且预测值为阳性(Positive)即实际值为0,预测值为1

    下面以实际代码为例进行介绍

    1. from sklearn import metrics
    2. print(metrics.confusion_matrix(y_true=[0, 0, 0, 1, 1, 1],
    3. y_pred=[1, 1, 1, 0, 1, 0]))

    这里的y_true是实际值,y_pred是预测值,可以观察到

    TN=0,没有样本实际值和预测值同时为0

    TP=1,只有第5个样本实际值和预测值均为1

    FN=2,第4,6个样本实际值为1且预测值为0

    FP=3,第1,2,3个样本实际值为0且预测值为1

    输出结果也和我们观察的一致

    1. [[0 3]
    2. [2 1]]

    编写函数根据混淆矩阵计算 accuracy, precision, recall, f1-score

    1. def cal(array):
    2. tp = array[1][1]
    3. tn = array[0][0]
    4. fp = array[0][1]
    5. fn = array[1][0]
    6. a = (tp+tn)/(tp+tn+fp+fn)
    7. p = tp/(tp+fp)
    8. r = tp/(tp+fn)
    9. f = 2*p*r/(p+r)
    10. print(a,p,r,f)

    使用编写的函数cal计算该混淆矩阵的四项指标,并与metric自带的分类报告(classification_report)函数的结果进行比较,这里第三个参数digits=4表示保留4位小数

    1. cal([[0, 3],[2, 1]])
    2. print(metrics.classification_report(y_true=[0, 0, 0, 1, 1, 1], y_pred=[1, 1, 1, 0, 1, 0], digits=4))

    运行结果如下,可以发现两者的计算结果一致。

    1. 0.16666666666666666 0.25 0.3333333333333333 0.28571428571428575
    2. precision recall f1-score support
    3. 0 0.0000 0.0000 0.0000 3
    4. 1 0.2500 0.3333 0.2857 3
    5. accuracy 0.1667 6
    6. macro avg 0.1250 0.1667 0.1429 6
    7. weighted avg 0.1250 0.1667 0.1429 6

    这里需要补充说明一下,为什么0那一行和1那一行都有precision, recall, f1-score。

    一般来说,我们通常计算的这三项指标均是把1视为阳性,把0视为阴性,以1作为研究对象。所以1那一行的三项指标的值和cal函数计算的结果一致。而0那一行表示把0作为研究对象。

  • 相关阅读:
    Netty - Reactor线程模型解析
    day3_C++
    聊一聊AI+BI数智融合,如何驱动企业数智化转型发展?
    Javascript知识【案例:表格隔行换色】
    Java手写注解处理器和案例拓展
    盘点54个Python实用工具源码Python爱好者不容错过
    基于JAVA砂石矿山管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
    卷积神经网络 - LeNet
    DTC商业模式研报 | 创新DTC策略利于提升业务灵活性和数字化体验
    爬虫试用 | 京东商品详情搜索采集助手 – 一键批量采集下载商品详情
  • 原文地址:https://blog.csdn.net/qq_42276781/article/details/127953974