sklearn 中F1-score的计算
一、相关概念
对于数据测试结果有下面4种情况:
真阳性(TP): 预测为正, 实际也为正
假阳性(FP): 预测为正, 实际为负
假阴性(FN): 预测为负,实际为正
真阴性(TN): 预测为负, 实际也为负
准确率(P) : TP/ (TP+FP)
召回率(R) : TP(TP + FN)
F1-score : 2(PR)/(P+R
f1_score原型:
sklearn.metrics.f1_score(y_true, y_pred,labels=None, pos_label=1, average=’binary’, sample_weight=None)
参数详解
1. y_true: 数据真实标签 Ground truth (correct) target values.
2. y_pred : 分类器分类标签 Estimated targets as returned by a classifier.
3. average : [None, ‘binary’ (default), ‘micro’, ‘macro’, ‘samples’, ‘weighted’]
多类/多标签目标需要此参数。默认为‘binary’,即二分类
4. labels : 类别标签,可不填
二、实例分析
一、数据
实际数据:1, 2, 3, 4, 5, 6, 7, 8, 9
真实类别:A, A, A, A, B, B, B, C, C
预测类别:A, A, B, C, B, B, C, B, C
则各个类别的真假阳阴性:
A B C 总计
TP 2 2 1 5
FP 0 2 2 4
FN 2 1 1 4
二、各个类别的准确率、召回率、F1-score
A类别的准确率 : PA = 2/(2+0)= 1
A类别的召回率 : RA = 2/(2+2)= 0.5
A类别的F1-score : FA = 2*(1*0.5)/(1+0.5) = 0.667
B类别的准确率 : PB = 2/(2+2)= 0.5
B类别的召回率 : RB = 2/(2+1)= 0.667
B类别的F1-score : FB = 2*(0.5*0.667)/(0.5+0.667) = 0.572
C类别的准确率 : PC = 1/(1+2)= 0.333
C类别的召回率 : RC = 1/(1+1)= 0.5
C类别的F1-score : FC = 2*(0.333*0.5)/(0.333+0.5) = 0.39976
三、F1-score
所有数据的F1-score:
有两种方式
第一种方式是计算数据中所有的TP,FP,FN,然后计算F1-score,即micro;
第二种方式是分别计算各个类别的TP,FP,FN,然后计算各个类被的F1-score,然后对F-score求平均,即macro.
micro:
P = 5/(5+4) = 0.556
R = 5/(5+4) = 0.556
F1-score = 2*(0.556*0.556)/(0.556+0.556) = 0.556
macro :
F1-score = (0.667+0.572+0.39976)/3 = 0.5462
四、使用sklearn计算f1-score
一、f1_score
为了使用sklearn的接口,分别使用1表示A类别,2表示B类别,3表示C类别,则
真实类别y_true : 1, 1, 1, 1, 2, 2, 2, 3, 3
预测类别 y_pred : 1, 1, 2, 3, 2, 2, 3, 2, 3
from sklearn.metrics import f1_scorey_true = [1, 1, 1, 1, 2, 2, 2, 3, 3]
y_pred = [1, 1, 2, 3, 2, 2, 3, 2, 3]f1_micro = f1_score(y_true,y_pred,average='micro')
f1_macro = f1_score(y_true,y_pred,average='macro')print('f1_micro: {0}'.format(f1_micro))
print('f1_macro: {0}'.format(f1_macro))
输出结果为:
f1_micro: 0.5555555555555556
f1_macro: 0.546031746031746
可见,与手动计算的结果一样
二、precision_recall_fscore_support
也可以使用sklearn计算各个类别的召回率准确率等
# 计算各个类别的准确率,召回率,与F1-score
from sklearn.metrics import precision_recall_fscore_supporty_true = [1, 1, 1, 1, 2, 2, 2, 3, 3]
y_pred = [1, 1, 2, 3, 2, 2, 3, 2, 3]p_class, r_class, f_class, support_micro = precision_recall_fscore_support(y_true,y_pred,labels=[1,2,3])print(p_class)
print(r_class)
print(f_class)
print(support_micro)
输出结果:
[1. 0.5 0.33333333]
[0.5 0.66666667 0.5 ]
[0.66666667 0.57142857 0.4 ]
[4 3 2]
与手动计算的一样。
注:
precision_recall_fscore_support返回每个类别的准确率,召回率,f1-score,各个指标中,每个类别的顺序与参数labels的顺序相同,比如:
p_class = [1. 0.5 0.33333333]
labels=[1,2,3]
则
类别1的准确率是1
类别2的准确率是0.5
类别3的准确率是0.3333333
sklearn 中F1-score的计算相关推荐
- 机器学习中精准度、召回率、准确率、F1 Score、G分数计算学习笔记
目录 1.基本符号表示 2.类别下的精准度计算(precision) 3.类别下的召回率计算(recall) 4.准确率的计算(accuracy) 5.F1 Score 6.G分数 1.基本符号表示 ...
- sklearn计算准确率、精确率、召回率、F1 score
目录 混淆矩阵 准确率 精确率 召回率 P-R曲线 F1 score 参考资料 分类是机器学习中比较常见的任务,对于分类任务常见的评价指标有准确率(Accuracy).精确率(Precision).召 ...
- R语言计算F1评估指标实战:F1 score、使用R中caret包中的confusionMatrix()函数为给定的logistic回归模型计算F1得分(和其他指标)
R语言计算F1评估指标实战:F1 score.使用R中caret包中的confusionMatrix()函数为给定的logistic回归模型计算F1得分(和其他指标) 目录
- 『NLP学习笔记』Sklearn计算准确率、精确率、召回率及F1 Score
Sklearn计算准确率.精确率.召回率及F1 Score! 文章目录 一. 混淆矩阵 1.1. 混淆矩阵定义 1.2. 例子演示 二. 准确率 2.1. 准确率定义 2.2. 例子演示 三. 精确率 ...
- TP、TN、FP、FN、Recall、Miss Rate、MCC、F1 Score 等指标计算
对一个二分类问题,实际取值只有正.负两例,而实际预测出来的结果也只会有0,1两种取值.如果一个实例是正类,且被预测为正类,就是真正类(True Positive),如果是负类,被预测为正类,为假正类( ...
- 机器学习中的 precision、recall、accuracy、F1 Score
1. 四个概念定义:TP.FP.TN.FN 先看四个概念定义: - TP,True Positive - FP,False Positive - TN,True Negative - FN,F ...
- sklearn中的支持向量机SVM(下)
1 二分类SVC的进阶 1.1 SVC用于二分类的原理复习 sklearn中的支持向量机SVM(上) 1.2 参数C的理解进阶 有一些数据,可能是线性可分的,但在线性可分状况下训练准确率不能达到100 ...
- 机器学习指标(Precision、Recall、mAP、F1 Score等)
以下文章摘录自: <机器学习观止--核心原理与实践> 京东: https://item.jd.com/13166960.html 当当:http://product.dangdang.co ...
- 分类指标:准确率、精确率、召回率、F1 score以及ROC、AUC、宏平均、加权平均
本文将介绍: 混淆矩阵(Confusion Matrix) 准确率(accuracy) 召回率(recall) 精确率(precision) F1score ROC和AUC 宏平均(macro avg ...
- sklearn中的线性回归大家族
1 概述 1.1 线性回归大家族 回归是一种应用广泛的预测建模技术,这种技术的核心在于预测的结果是连续型变量.决策树.随机森林.支持向量机的分类器等分类算法的预测标签是分类变量,多以{0,1}来表示, ...
最新文章
- 在创建的Silverlight Control中使用图片
- 13条注释 tips
- 下拉加载 实现 java_[Java教程]iscroll5实现一个下拉刷新上拉加载的效果
- 理解T-SQL: 脚本和批处理
- Visible Lattice Points SPOJ - VLATTICE
- 【Linux网络编程学习】阻塞、非阻塞、同步、异步以及五种I/O模型
- 随心所欲的DateTime显示格式
- Android开发实践:自定义ViewGroup的onLayout()分析
- JAVA 蔡羽 基础知识漫谈
- php 类中输出所有属性,PHP基于反射获取一个类中所有属性
- 如何实现pdf转换成cad呢?
- JavaScript设计模式----策略模式
- [论文笔记]Teaching Machines to Read and Comprehend
- 东方财富通l2决策版_东方财富三季度报点评:券茅券商中的茅台!
- 【NOIP2015模拟10.28B组】终章-剑之魂
- 视频GPU硬解码方案对比
- a到z的ascii码值是多少_大小写字母和数字的ascii码值是多少
- 算数基本定理和代数基本定理
- Keil无法跳转到(go to definition)函数定义的地方,而是出现Browser
- web前端开发技术期末考试_智慧职教mooc2020HTML5+CSS3 Web前端开发技术期末考试大全答案...
热门文章
- five86-2靶机渗透攻略
- 如何在html页面中左尖括号,想要在HTML中显示一个尖括号“
- 米狗族 Android平台Qt开发入门教程
- php捕捉Warning、Notice错误
- 【时光纪念】愿有岁月可回头
- 如何在macOS 中让Gatekeeper在任何地方允许应用程序
- Flink编程中遇到”scala.tools.reflect.ToolBoxError: reflective compilation has failed“的解决方法
- ubuntu java 中文_Ubuntu下 JAVA GUI 程序汉字显示为方框解决办法
- 反向代理为何叫反向代理?
- 6款超实用微信小程序,任何手机都需要!