文章目录

  • 样例
  • 混淆矩阵
  • precision、recall、F1分数介绍
  • 多分类 macro、micro、weighted

样例

本文使用以下样例来计算混淆矩阵、precision、recall和F1分数

真实值:[0, 1, 0, 0, 1, 2]
预测值:[0, 2, 1, 0, 0, 2]

混淆矩阵

混淆矩阵将分类结果进行了四种情况的区分,如下图

首先,不管是二分类还是多分类问题,混淆矩阵是针对其中某一类别的;如对苹果、香蕉、葡萄进行分类,建立苹果类的混淆矩阵时,苹果是正类(positive),其他类即香蕉、葡萄都是负类(negative)。

TP、FN、FP、TN的第一个字母全称为True或False,代表预测值与真实值是否相同,第二个字母全称为Positive或negative,代表预测值是正类还是负类。如:

  • TP:预测为苹果(P),实际也为苹果,预测正确(T)
  • FN:预测不是苹果(N),实际是苹果,预测错误(N)
  • FP:预测为苹果(P),实际也为苹果,预测错误(N)
  • TN:预测不是苹果(N),实际不是苹果,预测正确(T)

得到预测结果后,对每个类别的这四种情况进行计数,则得到了混淆矩阵。

在样例中类别0的混淆矩阵为

类别0 Positive Negative
Positive 2 1
Negative 1 2

在样例中类别1的混淆矩阵为

类别0 Positive Negative
Positive 0 2
Negative 1 3

在样例中类别2的混淆矩阵为

类别0 Positive Negative
Positive 1 0
Negative 1 4

多分类合到一起的混淆矩阵为

类别 0 1 2
0 2 1 0
1 1 0 1
2 0 0 1
  • 代码实现
from sklearn.metrics import confusion_matrixy_true = [0, 1, 0, 0, 1, 2]
y_pred = [0, 2, 1, 0, 0, 2]
print('confusion_matrix:\n', confusion_matrix(y_true, y_pred))

precision、recall、F1分数介绍

precision=类别n预测正确的个数预测值中类别n的个数=TPTP+FPprecision = \frac{类别n预测正确的个数}{预测值中类别n的个数}=\frac{TP}{TP+FP}precision=预测值中类别n的个数类别n预测正确的个数​=TP+FPTP​
recall=类别n预测正确的个数真实值中类别n的个数=TPTP+FNrecall = \frac{类别n预测正确的个数}{真实值中类别n的个数}=\frac{TP}{TP+FN}recall=真实值中类别n的个数类别n预测正确的个数​=TP+FNTP​
F1=2∗precision∗recallprecision+recallF1 = 2*\frac{precision * recall}{precision + recall}F1=2∗precision+recallprecision∗recall​

样例中每个类别的precision、recall、F1分数为

类别/评价指标 precision  recall   F1-score
类别0 2/3 2/3 2/3
类别1 0 0 0
类别2 1/2 1 2/3

多分类 macro、micro、weighted

在多分类任务中,每一个类别都有一组precision、recall、F1分数,如何平衡各类别的分数得到全局的评价指标呢?有三种方法macro、micro、weighted

  • macro宏观:单个类别计算完之后取平均,不考虑类别不平衡问题;

macro precision:(23+0+12)/3=718(\frac{2}{3} + 0 + \frac{1}{2}) / 3 = \frac{7}{18}(32​+0+21​)/3=187​
macro recall:(23+0+1)/3=59(\frac{2}{3} + 0 + 1) / 3 = \frac{5}{9}(32​+0+1)/3=95​
macro F1:(23+0+23)/3=49(\frac{2}{3} + 0 + \frac{2}{3}) / 3 = \frac{4}{9}(32​+0+32​)/3=94​

  • micro微观:所有样本做一个整体,分母为所有样本个数,

micro precision:36=0.5\frac{3}{6} = 0.563​=0.5
解释:3为各个类别预测正确的个数之和,6为各个类别预测值的总个数
micro recall:36=0.5\frac{3}{6} = 0.563​=0.5
解释:3为各个类别预测正确的个数之和,6为各个类别真实值的总个数,与精确率相等
micro F1:2∗0.5∗0.50.5+0.5=0.52 *\frac{0.5 * 0.5}{0.5 + 0.5} = 0.52∗0.5+0.50.5∗0.5​=0.5
解释:上面的precision和recall求的F1分数

  • weighted:按真实值中各类别个数取权重

weighted precision:23∗12+0∗13+12∗16=512\frac{2}{3} * \frac{1}{2} + 0 * \frac{1}{3} + \frac{1}{2} * \frac{1}{6} = \frac{5}{12}32​∗21​+0∗31​+21​∗61​=125​
解释:真实值中有3个0、2个1、1个2,所占比例分别为1/2、1/3、1/6
weighted recall:23∗12+0∗13+1∗16=12\frac{2}{3} * \frac{1}{2} + 0 * \frac{1}{3} + 1 * \frac{1}{6} = \frac{1}{2}32​∗21​+0∗31​+1∗61​=21​
weighted F1:23∗12+0∗13+23∗16=49\frac{2}{3} * \frac{1}{2} + 0 * \frac{1}{3} + \frac{2}{3} * \frac{1}{6} = \frac{4}{9}32​∗21​+0∗31​+32​∗61​=94​

  • 代码实现
from sklearn.metrics import f1_score, recall_score, precision_scorey_true = [0, 1, 0, 0, 1, 2]
y_pred = [0, 2, 1, 0, 0, 2]average = 'macro'
print('\nmacro precision:',precision_score(y_true, y_pred, average=average), '\nmacro recall:', recall_score(y_true, y_pred, average=average), '\nmacro f1_score:', f1_score(y_true, y_pred, average=average))average = 'micro'
print('\nmicro precision:',precision_score(y_true, y_pred, average=average), '\nmicro recall:', recall_score(y_true, y_pred, average=average), '\nmicro f1_score:', f1_score(y_true, y_pred, average=average))average = 'weighted'
print('\nweighted precision:',precision_score(y_true, y_pred, average=average), '\nweighted recall:', recall_score(y_true, y_pred, average=average), '\nweighted f1_score:', f1_score(y_true, y_pred, average=average))

手推多分类precision(精确率)、recall(召回率)、F1分数相关推荐

  1. python分类预测降低准确率_【火炉炼AI】机器学习011-分类模型的评估:准确率,精确率,召回率,F1值...

    [火炉炼AI]机器学习011-分类模型的评估:准确率,精确率,召回率,F1值 (本文所使用的Python库和版本号: Python 3.5, Numpy 1.14, scikit-learn 0.19 ...

  2. 【机器学习入门】(9) 逻辑回归算法:原理、精确率、召回率、实例应用(癌症病例预测)附python完整代码和数据集

    各位同学好,今天我和大家分享一下python机器学习中的逻辑回归算法.内容主要有: (1) 算法原理:(2) 精确率和召回率:(3) 实例应用--癌症病例预测. 文末有数据集和python完整代码 1 ...

  3. 模型评估指标_精准率、召回率、F1-score、ROC曲线、AUC曲线

    一.分类结果混淆矩阵 1.T.F.P.N辨析 P(Positive).N(Negative)针对的是预测值的结果. P表示对样本的预测结果为正例, N表示对样本的预测结果为反例. T(True).F( ...

  4. 一文读懂准确率、精准率、召回率、ROC、AUC、F1值

    准确率,精准率,召回率 分类问题中的混淆矩阵如下 TP: 预测为1,预测正确,即实际1 FP: 预测为1,预测错误,即实际0 FN: 预测为0,预测错确,即实际1 TN: 预测为0,预测正确即,实际0 ...

  5. Precision(精确率,正确率), Recall(召回率,查全率),Accuracy(准确率),F-Measure(F值)...

    一.指标概念 TP - 将正类预测为正类 FN - 将正类预测为负类, 类似假设检验中的第一类错误,拒真 FP - 将负类预测位正类,类似假设检验中的第二类错误,取伪 TN - 将负类预测位负类 假设 ...

  6. 机器学习——二分类、多分类的精确率和召回率

    机器学习有很多评估的指标.有了这些指标我们就横向的比较哪些模型的表现更好.我们先从整体上来看看主流的评估指标都有哪些: 分类问题评估指标: 准确率 – Accuracy 精确率(差准率)- Preci ...

  7. 机器学习基础(五十三)—— 精确率与召回率(多分类问题精确率和召回率的计算)

    精确率(precision),召回率(recall)由混淆矩阵(confusion matrix)计算得来. 在信息检索中,精确率通常用于评价结果的质量,而召回率用来评价结果的完整性. 实际上,精确度 ...

  8. python计算召回率_机器学习之分类:精确率和召回率

    精确率 精确率指标尝试回答以下问题: 在被识别为正类别的样本中,确实为正类别的比例是多少? 精确率的定义如下: Precision = \dfrac{TP}{TP + FP} 注意:如果模型的预测结果 ...

  9. scikit-learn:打印分类报告,求准确率、精确率、召回率、F1值等指标

    一.打印分类报告(使用scikit-learn库中的函数) from sklearn.metrics import classification_report# y_test为测试集真实标签, y_p ...

最新文章

  1. C++ 中this指针的用途
  2. bash: xsync: command not found的解决方法
  3. 破解CMOS SETUP密码诀窍
  4. springboot项目中的注解 启动项目的方式 解决spring的bean.xml配置不生效 spring的基础JDBC配置
  5. 虚拟的云服务器需要重启吗,虚拟主机重启服务器吗
  6. linuxHacks中记载的一些小技巧
  7. c#基础知识梳理(四)
  8. 【入门6】函数与结构体(今天刷洛谷了嘛)
  9. ansys怎么建立弯曲圆柱_螺栓连接模型的建立方法解析
  10. 确定对象在使用前已经被初始化
  11. 外呼机器人起名_智能外呼机器人十大厂商
  12. iOS 录音功能实现
  13. 一个由2020年1月7日 京东出现的重大 Bug 漏洞引起的思考...
  14. 【剑拔峨眉 团队裂变】蜜拓蜜教育高端特训营第二期即将上线
  15. authentication failed : unrecognized kernel32 module. / NM
  16. 社交媒体运营_在社交媒体上确定投诉相关帖子
  17. 谱尼软件测试谱尼为网络安全护航
  18. 电源适配器DC插头规格
  19. java ee7教程_JavaEE 7.0 Web技术教程 -解道Jdon
  20. html svg波浪,CSS3+SVG 实现波浪滚动效果

热门文章

  1. 空调控制系统节点服务器,汽车空调远程控制系统、方法及服务器
  2. IDEA去除波浪线(警告线)
  3. 经典Bug永流传---每周一“虫”(十五)
  4. mysql日期减后取月_mysql加减时间-函数-时间加减
  5. 四大组件之Service(二)-Service在各种情况下的生命周期
  6. python输出文本换行_python中print怎么不换行输出
  7. 实验二、80C51汇编语言编程实验:编写3字节二进制加法子程序,并用主程序调用不同的加数和被加数来检测该子程序的正确性。需考虑有进位和无进位情况。
  8. 软件测试基础知识(二)------------等价类划分法、边界值分析法、场景法、错误推测法、bug定义/类型/优先级/生命周期/跟踪管理
  9. 服务器主板u3芯片配i3CP0,小块头大智慧 华硕U36配i3/i5精睿来袭
  10. 终于有人说明白现在的数字化、虚拟世界、可视化、数据实体化的关系了