手推多分类precision(精确率)、recall(召回率)、F1分数
文章目录
- 样例
- 混淆矩阵
- 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分数相关推荐
- python分类预测降低准确率_【火炉炼AI】机器学习011-分类模型的评估:准确率,精确率,召回率,F1值...
[火炉炼AI]机器学习011-分类模型的评估:准确率,精确率,召回率,F1值 (本文所使用的Python库和版本号: Python 3.5, Numpy 1.14, scikit-learn 0.19 ...
- 【机器学习入门】(9) 逻辑回归算法:原理、精确率、召回率、实例应用(癌症病例预测)附python完整代码和数据集
各位同学好,今天我和大家分享一下python机器学习中的逻辑回归算法.内容主要有: (1) 算法原理:(2) 精确率和召回率:(3) 实例应用--癌症病例预测. 文末有数据集和python完整代码 1 ...
- 模型评估指标_精准率、召回率、F1-score、ROC曲线、AUC曲线
一.分类结果混淆矩阵 1.T.F.P.N辨析 P(Positive).N(Negative)针对的是预测值的结果. P表示对样本的预测结果为正例, N表示对样本的预测结果为反例. T(True).F( ...
- 一文读懂准确率、精准率、召回率、ROC、AUC、F1值
准确率,精准率,召回率 分类问题中的混淆矩阵如下 TP: 预测为1,预测正确,即实际1 FP: 预测为1,预测错误,即实际0 FN: 预测为0,预测错确,即实际1 TN: 预测为0,预测正确即,实际0 ...
- Precision(精确率,正确率), Recall(召回率,查全率),Accuracy(准确率),F-Measure(F值)...
一.指标概念 TP - 将正类预测为正类 FN - 将正类预测为负类, 类似假设检验中的第一类错误,拒真 FP - 将负类预测位正类,类似假设检验中的第二类错误,取伪 TN - 将负类预测位负类 假设 ...
- 机器学习——二分类、多分类的精确率和召回率
机器学习有很多评估的指标.有了这些指标我们就横向的比较哪些模型的表现更好.我们先从整体上来看看主流的评估指标都有哪些: 分类问题评估指标: 准确率 – Accuracy 精确率(差准率)- Preci ...
- 机器学习基础(五十三)—— 精确率与召回率(多分类问题精确率和召回率的计算)
精确率(precision),召回率(recall)由混淆矩阵(confusion matrix)计算得来. 在信息检索中,精确率通常用于评价结果的质量,而召回率用来评价结果的完整性. 实际上,精确度 ...
- python计算召回率_机器学习之分类:精确率和召回率
精确率 精确率指标尝试回答以下问题: 在被识别为正类别的样本中,确实为正类别的比例是多少? 精确率的定义如下: Precision = \dfrac{TP}{TP + FP} 注意:如果模型的预测结果 ...
- scikit-learn:打印分类报告,求准确率、精确率、召回率、F1值等指标
一.打印分类报告(使用scikit-learn库中的函数) from sklearn.metrics import classification_report# y_test为测试集真实标签, y_p ...
最新文章
- C++ 中this指针的用途
- bash: xsync: command not found的解决方法
- 破解CMOS SETUP密码诀窍
- springboot项目中的注解 启动项目的方式 解决spring的bean.xml配置不生效 spring的基础JDBC配置
- 虚拟的云服务器需要重启吗,虚拟主机重启服务器吗
- linuxHacks中记载的一些小技巧
- c#基础知识梳理(四)
- 【入门6】函数与结构体(今天刷洛谷了嘛)
- ansys怎么建立弯曲圆柱_螺栓连接模型的建立方法解析
- 确定对象在使用前已经被初始化
- 外呼机器人起名_智能外呼机器人十大厂商
- iOS 录音功能实现
- 一个由2020年1月7日 京东出现的重大 Bug 漏洞引起的思考...
- 【剑拔峨眉 团队裂变】蜜拓蜜教育高端特训营第二期即将上线
- authentication failed : unrecognized kernel32 module. / NM
- 社交媒体运营_在社交媒体上确定投诉相关帖子
- 谱尼软件测试谱尼为网络安全护航
- 电源适配器DC插头规格
- java ee7教程_JavaEE 7.0 Web技术教程 -解道Jdon
- html svg波浪,CSS3+SVG 实现波浪滚动效果
热门文章
- 空调控制系统节点服务器,汽车空调远程控制系统、方法及服务器
- IDEA去除波浪线(警告线)
- 经典Bug永流传---每周一“虫”(十五)
- mysql日期减后取月_mysql加减时间-函数-时间加减
- 四大组件之Service(二)-Service在各种情况下的生命周期
- python输出文本换行_python中print怎么不换行输出
- 实验二、80C51汇编语言编程实验:编写3字节二进制加法子程序,并用主程序调用不同的加数和被加数来检测该子程序的正确性。需考虑有进位和无进位情况。
- 软件测试基础知识(二)------------等价类划分法、边界值分析法、场景法、错误推测法、bug定义/类型/优先级/生命周期/跟踪管理
- 服务器主板u3芯片配i3CP0,小块头大智慧 华硕U36配i3/i5精睿来袭
- 终于有人说明白现在的数字化、虚拟世界、可视化、数据实体化的关系了