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. How to compute f1 score for each epoch in Keras

    https://medium.com/@thongonary/how-to-compute-f1-score-for-each-epoch-in-keras-a1acd17715a2 https:// ...

  2. hihocoder 1522 : F1 Score

    题目链接   时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和他的小伙伴们一起写了很多代码.时间一久有些代码究竟是不是自己写的,小Hi也分辨不出来了. 于是他实现 ...

  3. 机器学习中的 precision、recall、accuracy、F1 Score

    1. 四个概念定义:TP.FP.TN.FN 先看四个概念定义: - TP,True Positive - FP,False Positive - TN,True Negative - FN,False ...

  4. 机器学习:评价分类结果(F1 Score)

    一.基础 疑问1:具体使用算法时,怎么通过精准率和召回率判断算法优劣? 根据具体使用场景而定: 例1:股票预测,未来该股票是升还是降?业务要求更精准的找到能够上升的股票:此情况下,模型精准率越高越优. ...

  5. F1 score,micro F1score,macro F1score 的定义

    F1 score,micro F1score,macro F1score 的定义 2018年09月28日 19:30:08 wanglei_1996 阅读数 976   本篇博客可能会继续更新 最近在 ...

  6. 【tf.keras】实现 F1 score、precision、recall 等 metric

    tf.keras.metric 里面竟然没有实现 F1 score.recall.precision 等指标,一开始觉得真不可思议.但这是有原因的,这些指标在 batch-wise 上计算都没有意义, ...

  7. 机器学习--如何理解Accuracy, Precision, Recall, F1 score

    当我们在谈论一个模型好坏的时候,我们常常会听到准确率(Accuracy)这个词,我们也会听到"如何才能使模型的Accurcy更高".那么是不是准确率最高的模型就一定是最好的模型? 这篇博文会向大家解释 ...

  8. [吴恩达机器学习笔记]11机器学习系统设计3-4/查全率/查准率/F1分数

    11. 机器学习系统的设计 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考资料 斯坦福大学 2014 机器学习教程中文笔记 by 黄海广 11.3 偏斜类的误差度量 Error Metr ...

  9. 机器学习笔记,使用metrics.classification_report显示精确率,召回率,f1指数

    sklearn中的classification_report函数用于显示主要分类指标的文本报告.在报告中显示每个类的精确度,召回率,F1值等信息. 主要参数: y_true:1维数组,或标签指示器数组 ...

随机推荐

  1. UI自动化学习笔记- UnitTest单元测试框架详解

    一.UnitTest基本使用 1. UnitTest框架 1.1 什么是框架 说明: 框架英文单词frame 为解决一类事情的功能集合 1.2什么是UnitTest框架 概念:UnitTest是pyt ...

  2. gRPC四种模式、认证和授权实战演示,必赞~~~

    前言 上一篇对gRPC进行简单介绍,并通过示例体验了一下开发过程.接下来说说实际开发常用功能,如:gRPC的四种模式.gRPC集成JWT做认证和授权等. 正文 1. gRPC四种模式服务 以下案例演示 ...

  3. 解决pip安装时出现报错TypeError unsupported operand type(s) for -= 'Retry' and 'int'

    1.参考 https://stackoverflow.com/questions/42610545/typeerror-unsupported-operand-types-for-retry-and- ...

  4. Min25 筛与 Powerful Numbers

    Min25 筛与 Powerful Numbers Min25 筛 大喊一声 Min25 NB!!! 这是一个非常神奇的东西,用于求更加普遍的积性函数的前缀和. 比如我们要求 \(\sum_{i=1} ...

  5. python03篇 字符串常用方法和文件操作(一)

    一.字符串常用方法 s1 = ' abcsfsfaadfdd ' s = s1.strip() print(s) print(len(s.strip())) print(s.count('a')) # ...

  6. PYTHON matplotlib入门

    '''作为线性图的替代,可以通过向 plot() 函数添加格式字符串来显示离散值. 可以使用以下格式化字符. 字符 描述 '-' 实线样式 '--' 短横线样式 '-.' 点划线样式 ':' 虚线样式 ...

  7. ES6 模版字符串及常用的es6扩展方法

    1.ES6 模版字符串es6 模版字符串主要用于简化字符串的拼接 <script type="text/javascript"> let obj={name:'rdb' ...

  8. python + flask轻量级框架

    from flask import Flask,jsonify,make_response,abort,Response,request from flask_restful import Api,R ...

  9. MySql存储过程的创建与使用及在thinkphp中如何调用笔记

    学习sql的存储过程,笔记总结如下: MySQL默认将分号,即";"作为语句的分隔符.如果是这样的话,则一个存储过程将很难正常创建,因为它的BEGIN和END之间可以是任意数量的S ...

  10. P6982 [NEERC2015]Jump

    P6982 [NEERC2015]Jump 题意 给你一个未知的 01 串,每次可以输出询问一个 01 串,如果该串中正确的个数刚好等于 \(n\) 或者 \(n/2\) ,将会返回相应的答案,否则会 ...