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 的值,是其他二分类的值,那么就可以通过 labelspos_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:计算每个实例的指标,并找到它们的平均值

比较常用的是 macromicro 这两种取值

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相关推荐

  1. python - sklearn 计算精准率(Precision)

    python - sklearn 计算查准率 因为最近写的分类模型需要性能评价 ,常用的分类性能评价有 查准率.召回率.准确率.F1 分类问题的常用的包 sklearn ,下面对查准率所用的方法进行介 ...

  2. python - sklearn 计算准确率

    python - sklearn 计算准确率 因为最近写的分类模型需要性能评价 ,常用的分类性能评价有 准确率.查准率.召回率.F1 分类问题的常用的包 sklearn ,下面对准确率所用的方法进行介 ...

  3. [Python+sklearn] 计算混淆矩阵 confusion_matrix()函数

    python sklearn 计算混淆矩阵 confusion_matrix()函数 参考sklearn官方文档:sklearn.metrics.confusion_matrix. 功能: 计算混淆矩 ...

  4. R包rdist、Python sklearn计算pairwise distance

    R包rdist计算pairwise distance 最近想要计算pairwise distance,使用嵌套循环可以解决,但是当矩阵太大的时,就计算慢很多(0.5h到几天的差别). 1. rdist ...

  5. Spark 和 Python.sklearn:使用随机森林计算 feature_importance 特征重要性

    前言 在使用GBDT.RF.Xgboost等树类模型建模时,往往可以通过feature_importance 来返回特征重要性,本文以随机森林为例介绍其原理与实现.[ 链接:机器学习的特征重要性究竟是 ...

  6. 『NLP学习笔记』Sklearn计算准确率、精确率、召回率及F1 Score

    Sklearn计算准确率.精确率.召回率及F1 Score! 文章目录 一. 混淆矩阵 1.1. 混淆矩阵定义 1.2. 例子演示 二. 准确率 2.1. 准确率定义 2.2. 例子演示 三. 精确率 ...

  7. sklearn计算准确率、精确率、召回率、F1 score

    目录 混淆矩阵 准确率 精确率 召回率 P-R曲线 F1 score 参考资料 分类是机器学习中比较常见的任务,对于分类任务常见的评价指标有准确率(Accuracy).精确率(Precision).召 ...

  8. python实现计算精度、召回率和F1值

    python实现计算精度.召回率和F1值   摘要:在深度学习的分类任务中,对模型的评估或测试时需要计算其在验证集或测试集上的预测精度(prediction/accuracy).召回率(recall) ...

  9. 多分类f1分数_所以多分类情况下sklearn的f1值到底是怎么计算的

    已经很久没有更新新的文章啦,最近在弄GCN,很多东西的理解都还没有很透彻,所以也不太好发,不过就在今天"南归"的时候刷知乎,刷到了这么一个朋友( @苏小胖与喵 )的疑问: 这... ...

最新文章

  1. 为什么阿里巴巴禁止使用BigDecimal的equals方法做等值比较?
  2. 硬盘由于io设备错误无法运行此项请求_移动硬盘坏了真倒霉,祸不单行U盘也坏了,数据怎么存储才安全?...
  3. 必须要调整心态,积极起来,不能再偷懒
  4. java log4j 多个文件_为什么log4j会记录到两个单独的文件? [重复]
  5. 选择控件— UI组件系列
  6. es过滤指定数据 java_elasticsearch 结构化搜索_在案例中实战基于range filter来进行范围过滤...
  7. [转]Google发现的十大真理
  8. 销售管理系统哪个好用?
  9. 以太网--车载以太网
  10. 佳能数码相机内存卡数据恢复
  11. 手把手教你用SPSS做出二元logistic回归分析
  12. gmp 5.0.1 windows 下编译使用
  13. mysql schemata_mysql8 参考手册-INFORMATION_SCHEMA SCHEMATA表
  14. 雷石服务器带狗盘不显示,雷石点播 哼唱打分说明
  15. 用CSS样式制作小三角和小箭头
  16. matlab计算惯性矩,动力总成主惯性矩计算及扭矩轴(TRA)位置确定
  17. 用jacob为word表格设置边框线
  18. (Arduino)ESP8266通过局域网通信控制LED
  19. 检测整数是否含有7 或 是7的倍数
  20. vue中适配移动端布局方案

热门文章

  1. win7的远程桌面连接在哪
  2. 长沙鸿蒙置业楼盘,来了!来了!湖南金融中心北中心,全新盘规划公示!刚需户型为主!...
  3. 东京工业大学 计算机 大学院,2020年东京工业大学计算机科学硕士申请条件
  4. 云南贵州地区市场知名的调查研究咨询公司
  5. JavaScript - 正则表达式
  6. 程序猿福音——sonarqube,代码质量检测一条龙服务,本文带你一探究竟
  7. GSM Communication on EBox4300--(2)
  8. 关于 Spfile文件误删除 或者 优化错误 恢复
  9. Gaussian Error Linerar Units(GELUS)激活函数详细解读
  10. css:currentColor和inherit属性的区别