python - sklearn 计算F1
python - sklearn 计算F1
因为最近写的分类模型需要性能评价 ,常用的分类性能评价有 查准率、召回率、准确率、F1
分类问题的常用的包 sklearn ,下面对F1所用的方法进行介绍
查准率 请看另外一篇文章: sklearn 计算查准率
召回率 请看另外一篇文章: sklearn 计算召回率
前提知识
对于我们的二分类问题,会有以下情况:
- 真正例(True Positive,TP):真实类别为正例,预测类别为正例。
- 假正例(False Positive,FP):真实类别为负例,预测类别为正例。
- 假负例(False Negative,FN):真实类别为正例,预测类别为负例。
- 真负例(True Negative,TN):真实类别为负例,预测类别为负例。
然后可以构建混淆矩阵(Confusion Matrix)如下表所示。
真实类别 | 预测类别 | 预测类别 |
---|---|---|
正例 | 负例 | |
正例 | TP | FN |
负例 | FP | TN |
准确率,又称查准率(Precision,P):
P=TP/(TP+FP)P=TP/(TP+FP) P=TP/(TP+FP)
召回率,又称查全率(Recall,R):
R=TP/(TP+FN)R=TP/(TP+FN) R=TP/(TP+FN)
F1值:
F1=(2∗P∗R)/(P+R)F1=(2*P*R)/(P+R) F1=(2∗P∗R)/(P+R)
1、sklearn.metrics.f1_score()方法
方法说明:
sklearn.metrics.f1_score(y_true, y_pred, *, labels=None, pos_label=1,average='binary', sample_weight=None,zero_division="warn"):
参数介绍:
y_true:真实的标签,即数据集中真实的分类标签情况,是一个1维的数组
y_pred:预测标签,即模型预测的分类标签情况,是一个1维的数组
labels:可选参数,默认为None ,是一个一维的数组, 二分类时,不需要用这个参数。
pos_label:字符串或者int类型,默认值是1,如果
average='binary
且数据是二分类,则需要报告的类,如果数据是多类或多标签的,这将被忽略;设置labels=[pos_label]
和average != 'binary
将只报告该标签的分数。average:字符串类型,取值为 [None, ‘binary’ (default), ‘micro’, ‘macro’, ‘samples’, ‘weighted’]。默认为binary,给出正样本的准确率,也就是pos_label默认参数1时的准确率。
sample_weight:数组类型,样本的权重
zero_division:取值为 [“warn”, ‘0’ , ‘1’] ,设置存在零除法时返回的值,warn也相等于是0,但是会出现警告
2、sklearn.metrics.precision_score()的使用举例(二分类)
在二分类问题上,使用这个非常简单,因为方法中很多参数都是针对 二分类 默认的参数,不需要额外指定
例如:pos_label 默认为1呀(二分类正样本的值),average为 二分类 binary
只需要 传入预测的 与 真实的 标签,即可求出准确率
from sklearn.metrics import f1_scorepred = [0, 1, 0, 1]target = [0, 1, 1, 0]f1 = f1_score(pred, target)print(f1)===> 0.5
如果不是 0 1 的值,是其他二分类的值,那么就可以通过 labels、pos_label 来指定
labels = [3,4] # 二分类 两个类别的值pred = [3, 4, 3, 4] # 预测的值target = [3, 4, 4, 3] # 真实的值f1 = f1_score(pred, target , labels = labels , pos_label= 3) # pos_label指定正样本的值是多少print(f1 )===> 0.5
2、sklearn.metrics.f1_score() 的使用举例(多分类)
针对多分类问题,各个参数的传参:
- labels :需要是传入 多分类的 类别数组
- pos_label:该值会被忽略
- average:取值 ‘micro’, ‘macro’, ‘samples’, ‘weighted’
- sample_weight:权重
举例:
labels = [1, 2, 3, 4] # 有哪几类pred = [1, 2, 3, 4, 2, 3, 4, 1] # 预测的值target = [2, 3, 1, 4, 1, 4, 4, 1] # 真实的值precision = f1_score(pred, target, labels=labels, average="micro") # average 指定为micro
print(precision)precision = f1_score(pred, target, labels=labels, average="macro") # average 指定为macro
print(precision)precision = f1_score(pred, target, labels=labels, average="weighted") # average 指定为weighted
print(precision)===>0.375
===>0.30000000000000004
===>0.30000000000000004
这里主要的是 average 的不同,计算结果会有不同
- macro:是先对每一个类统计指标值,然后在对所有类求算术平均值。
- micro:是对数据集中的每一个实例不分类别进行统计建立全局混淆矩阵,然后计算相应指标
- weightes:计算每个标签的指标,并找到它们的平均加权支持度
- samples:计算每个实例的指标,并找到它们的平均值
比较常用的是 macro 与 micro 这两种取值
1)macro 是先对每一个类统计指标值,然后利用下面的公式对所有类求算术平均值,
MacroP=(1/n)(P1+P2+P3+....+Pn)MacroP=(1/n)(P1+P2+P3+....+Pn) MacroP=(1/n)(P1+P2+P3+....+Pn)
MacroR=(1/n)(R1+R2+R3+....+Rn)MacroR=(1/n)(R1+R2+R3+....+Rn) MacroR=(1/n)(R1+R2+R3+....+Rn)
MacroF=(2∗MacroP∗MacroR)/(MacroP+MacroR)MacroF=(2*MacroP*MacroR)/(MacroP + MacroR) MacroF=(2∗MacroP∗MacroR)/(MacroP+MacroR)
2)micro 是对数据集中的每一个实例不分类别进行统计建立全局混淆矩阵,然后计算相应指标
MicroP=(TP1+TP2+TP3+....TPn)/((TP1+TP2+TP3+....TPn)+(FP1+FP2+FP3+....FPn))MicroP=(TP1+TP2+TP3+....TPn)/((TP1+TP2+TP3+....TPn)+(FP1+FP2+FP3+....FPn)) MicroP=(TP1+TP2+TP3+....TPn)/((TP1+TP2+TP3+....TPn)+(FP1+FP2+FP3+....FPn))
MicroP=(TP1+TP2+TP3+....TPn)/((TP1+TP2+TP3+....TPn)+(FN1+FN2+FN3+....FNn))MicroP=(TP1+TP2+TP3+....TPn)/((TP1+TP2+TP3+....TPn)+(FN1+FN2+FN3+....FNn)) MicroP=(TP1+TP2+TP3+....TPn)/((TP1+TP2+TP3+....TPn)+(FN1+FN2+FN3+....FNn))
MicroF=(2∗MicroP∗MicroR)/(MicroP+MicroR)MicroF=(2*MicroP*MicroR)/(MicroP + MicroR) MicroF=(2∗MicroP∗MicroR)/(MicroP+MicroR)
根据不同的值,计算不同的 F1
python - sklearn 计算F1相关推荐
- python - sklearn 计算精准率(Precision)
python - sklearn 计算查准率 因为最近写的分类模型需要性能评价 ,常用的分类性能评价有 查准率.召回率.准确率.F1 分类问题的常用的包 sklearn ,下面对查准率所用的方法进行介 ...
- python - sklearn 计算准确率
python - sklearn 计算准确率 因为最近写的分类模型需要性能评价 ,常用的分类性能评价有 准确率.查准率.召回率.F1 分类问题的常用的包 sklearn ,下面对准确率所用的方法进行介 ...
- [Python+sklearn] 计算混淆矩阵 confusion_matrix()函数
python sklearn 计算混淆矩阵 confusion_matrix()函数 参考sklearn官方文档:sklearn.metrics.confusion_matrix. 功能: 计算混淆矩 ...
- R包rdist、Python sklearn计算pairwise distance
R包rdist计算pairwise distance 最近想要计算pairwise distance,使用嵌套循环可以解决,但是当矩阵太大的时,就计算慢很多(0.5h到几天的差别). 1. rdist ...
- Spark 和 Python.sklearn:使用随机森林计算 feature_importance 特征重要性
前言 在使用GBDT.RF.Xgboost等树类模型建模时,往往可以通过feature_importance 来返回特征重要性,本文以随机森林为例介绍其原理与实现.[ 链接:机器学习的特征重要性究竟是 ...
- 『NLP学习笔记』Sklearn计算准确率、精确率、召回率及F1 Score
Sklearn计算准确率.精确率.召回率及F1 Score! 文章目录 一. 混淆矩阵 1.1. 混淆矩阵定义 1.2. 例子演示 二. 准确率 2.1. 准确率定义 2.2. 例子演示 三. 精确率 ...
- sklearn计算准确率、精确率、召回率、F1 score
目录 混淆矩阵 准确率 精确率 召回率 P-R曲线 F1 score 参考资料 分类是机器学习中比较常见的任务,对于分类任务常见的评价指标有准确率(Accuracy).精确率(Precision).召 ...
- python实现计算精度、召回率和F1值
python实现计算精度.召回率和F1值 摘要:在深度学习的分类任务中,对模型的评估或测试时需要计算其在验证集或测试集上的预测精度(prediction/accuracy).召回率(recall) ...
- 多分类f1分数_所以多分类情况下sklearn的f1值到底是怎么计算的
已经很久没有更新新的文章啦,最近在弄GCN,很多东西的理解都还没有很透彻,所以也不太好发,不过就在今天"南归"的时候刷知乎,刷到了这么一个朋友( @苏小胖与喵 )的疑问: 这... ...
最新文章
- 为什么阿里巴巴禁止使用BigDecimal的equals方法做等值比较?
- 硬盘由于io设备错误无法运行此项请求_移动硬盘坏了真倒霉,祸不单行U盘也坏了,数据怎么存储才安全?...
- 必须要调整心态,积极起来,不能再偷懒
- java log4j 多个文件_为什么log4j会记录到两个单独的文件? [重复]
- 选择控件— UI组件系列
- es过滤指定数据 java_elasticsearch 结构化搜索_在案例中实战基于range filter来进行范围过滤...
- [转]Google发现的十大真理
- 销售管理系统哪个好用?
- 以太网--车载以太网
- 佳能数码相机内存卡数据恢复
- 手把手教你用SPSS做出二元logistic回归分析
- gmp 5.0.1 windows 下编译使用
- mysql schemata_mysql8 参考手册-INFORMATION_SCHEMA SCHEMATA表
- 雷石服务器带狗盘不显示,雷石点播 哼唱打分说明
- 用CSS样式制作小三角和小箭头
- matlab计算惯性矩,动力总成主惯性矩计算及扭矩轴(TRA)位置确定
- 用jacob为word表格设置边框线
- (Arduino)ESP8266通过局域网通信控制LED
- 检测整数是否含有7 或 是7的倍数
- vue中适配移动端布局方案
热门文章
- win7的远程桌面连接在哪
- 长沙鸿蒙置业楼盘,来了!来了!湖南金融中心北中心,全新盘规划公示!刚需户型为主!...
- 东京工业大学 计算机 大学院,2020年东京工业大学计算机科学硕士申请条件
- 云南贵州地区市场知名的调查研究咨询公司
- JavaScript - 正则表达式
- 程序猿福音——sonarqube,代码质量检测一条龙服务,本文带你一探究竟
- GSM Communication on EBox4300--(2)
- 关于 Spfile文件误删除 或者 优化错误 恢复
- Gaussian Error Linerar Units(GELUS)激活函数详细解读
- css:currentColor和inherit属性的区别