【笔记】F1 score

作者:神秘网友 发布时间:2021-01-25 13:38:10

【笔记】F1 score

F1 score

关于精准率和召回率

精准率和召回率可以很好的评价对于数据极度偏斜的二分类问题的算法,有个问题,毕竟是两个指标,有的时候这两个指标也会产生差异,对于不同的算法,精准率可能高一些,召回率可能低一些,反之一样,真正使用的时候应该根据具体的使用场景来去解读这两个指标

想要得到这两个指标之间的平衡,希望能同时照顾到精准率和召回率,这样就可以使用新的指标,F1 score

F1 score的目的就是兼顾这两个指标,描述的是精准率和召回率的调和平均值,公式可以写成

这种的好处就是,如果说一个值特别低,另外一个值特别高,最终得到的F1 score的值也会很低,只有两个值都很高,得到的值才会非常高

可以将式子进行化简通分变形,最后可以得到

具体实现

(在notebook中)

首先实现一个F1 score,根据上式即可写出,设置如果分母为0,直接返回0即可

  import numpy as np

  def f1_score(precision,recall):
      try:
          return 2*precision*recall / (precision+recall)
      except:
          return 0.0

如果精准率为0.5,召回率为0.5,求出对应的F1 score

  precision = 0.5
  recall = 0.5
  f1_score(precision,recall)

结果如下

如果精准率为0.1,召回率为0.9,求出对应的F1 score

  precision = 0.1
  recall = 0.9
  f1_score(precision,recall)

结果如下

如果精准率为0.0,召回率为1.0,求出对应的F1 score

  precision = 0.0
  recall = 1.0
  f1_score(precision,recall)

结果如下

使用手写识别数据集,相应的设置为极度偏斜的数据情况,然后对数据集进行分割

  from sklearn import datasets

  digits = datasets.load_digits()
  X = digits.data
  y = digits.target.copy()

  y[digits.target==9] = 1
  y[digits.target!=9] = 0

  from sklearn.model_selection import train_test_split
  X_train,X_test,y_train,y_test =  train_test_split(X,y,random_state=666)

使用sklearn中的逻辑回归后,计算准确度

  from sklearn.linear_model import LogisticRegression

  log_reg = LogisticRegression()
  log_reg.fit(X_train,y_train)
  log_reg.score(X_test,y_test)

结果如下

对训练的结果进行预测,使用混淆矩阵得出

  y_predict = log_reg.predict(X_test)

  from sklearn.metrics import confusion_matrix

  confusion_matrix(y_test,y_predict)

结果如下

计算准确率

  from sklearn.metrics import precision_score

  precision_score(y_test,y_predict)

结果如下

计算召回率

  from sklearn.metrics import recall_score

  recall_score(y_test,y_predict)

结果如下

使用sklearn中的f1_score计算F1 score,传入真实值和预测值

  from sklearn.metrics import f1_score

  f1_score(y_test,y_predict)

结果如下

以上就是F1 score的实现以及概念

【笔记】F1 score 相关文章

  1. 【笔记】混淆矩阵,精准率和召回率

    混淆矩阵,精准率和召回率 评论回归算法的好坏点击这里 评价分类算法是不能单单靠一个分类准确度就可以衡量的,单用一个分类准确度是有问题的 比如说,一个癌症预测系统,输入体检信息,就可以判断是否得了癌症,这个系统的预测准确率有99.9%,但是不能说这

  2. 替罪羊树学习笔记

    Part 0 引子 我们都知道,有一种东西叫 BST。 我们都知道,BST 在极限数据会卡爆。 我们都知道,为了让 BST 不被卡,有很多种平衡树。 但你知道有一种平衡树好写速度快吗那就是替罪羊树。 Part 1 替罪羊树平衡的原理 替罪羊树是一种平衡树,一种平衡的 BST。

  3. Python深度学习笔记08--处理文本数据的常用方法

    6.1 处理文本数据 6.1.1 单词和字符的one-hot编码 (1)单词级的one-hot编码: 1 # 单词级的one-hot编码 2 import numpy as np 3 4 # 初始数据:每个样本是列表的一个元素(本例中的样本是一个句子,但也可以是一整篇文档) 5 samples = ['The cat sat on the ma

  4. SAS初学者笔记---004---循环结构与判断结构

    关于循环与判断的语句在所有程序设计中十分重要,在SAS程序中也不例外。逻辑清晰的循环与判断结构是日后进行数据清洗、数据构造的必要前提。(反正就是很重要就对了) 循环结构 关于循环结构,常见的有三种类型 DO Index. 索引循环,此语句是DO循环语句中最

  5. JUnit学习笔记

    junit学习笔记 不影响原有类的情况下,生成测试类。 IDEA下载插件 插件名字为JUnitGeneratorV2.0 方法 Setting选项中的Plugins里搜索下载 Setting选项中的JUnnit Generator中的Output Path配置测试类存放位置 ${SOURCEPATH}/../test/${PACKAGE}/${FILENAME}

  6. 对于线性回归通俗理解的笔记

    经常听说线性回归(Linear Regression) 到底什么才是线性,什么才是回归 有学者说,线性回归模型是一切模型之母。所以,我们的机器学习之旅,也将从这个模型开始! 建立回归模型的好处:随便给一个x,就能通过模型算出y,这个y可能和实际值不一样,这个y是

  7. RabbitMQ消息中间件(第二章)第二部分-笔记-快速搭建与控制台介绍

    消息生产与消费 ConnectionFactory: 获取连接工厂 Connection:一个连接 Channel:数据通信信道,可发送和接收消息 Queue:具体的消息存储队列 Producer Consumer 生产和消费者 代码演示 引入maven依赖 dependency groupIdcom.rabbitmq/groupId artifactIdamqp

  8. RabbitMQ消息中间件(第二章)第一部分-笔记

    本章导航 互联网大厂为什么选择RabbitMQ? RabbitMQ的高性能之道是如何做到? 什么是AMQP高级协议? AMQP核心概念是什么? RabbitMQ整体架构模型是什么样子的? RabbitMQ消息是如何流转的? RabbitMQ安装与使用 命令行与管控台 RabbitMQ消息生产与消费 Rabbit

  9. RabbitMQ消息中间件(第二章)第四部分-笔记

    Binging-绑定 Exchange和Exchange、Queue之间的连接关系 Binging可以包含RoutingKey或者参数 Queue-消息队列 消息队列,实际存储消息数据 Durability:是否持久化,Durable:是,Transient:否 Auto delete:如选yes,代表最后一个监听被移除之后,该Queue会

  10. vue2源码-响应式处理(学习笔记)-2

    回顾vue的使用 index.html文件 div id="app"{{name}}/div!-- 对数据进行渲染 -- script src="./dist/vue.js"/script !-- 引入vue(自己准备手写的) -- script //viewModel 数据模型 //典型的MVVM View vm model let vm = new Vue({//vue的使用首先要挂载 //

每天更新java,php,javaScript,go,python,nodejs,vue,android,mysql等相关技术教程,教程由网友分享而来,欢迎大家分享IT技术教程到本站,帮助自己同时也帮助他人!

Copyright 2020, All Rights Reserved. Powered by 跳墙网(www.tqwba.com)|网站地图|关键词