Python3写精确率(precision)、召回率(recall)以及F1分数(F1_Score)

2024-02-21 01:10

本文主要是介绍Python3写精确率(precision)、召回率(recall)以及F1分数(F1_Score),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 四个概念定义:TP、FP、TN、FN

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

如何理解记忆这四个概念定义呢?

举个简单的二元分类问题 例子:

假设,我们要对某一封邮件做出一个判定,判定这封邮件是垃圾邮件、还是这封邮件不是垃圾邮件?

如果判定是垃圾邮件,那就是做出(Positive)的判定; 
如果判定不是垃圾邮件,那就做出(Negative)的判定。

True Positive(TP):预测为正,判断正确;
False Positive(FP):预测为正,判断错误;
True Negative(TN):预测为负,判断正确;
False Negative(FN):预测为负,判断错误。

 

代码实现:

import numpy as npy_true = np.array([0, 1, 1, 0, 1, 0])
y_pred = np.array([1, 1, 1, 0, 0, 1])#true positive
TP = np.sum(np.logical_and(np.equal(y_true,1),np.equal(y_pred,1)))
print(TP)#false positive
FP = np.sum(np.logical_and(np.equal(y_true,0),np.equal(y_pred,1)))
print(FP)#true negative
TN = np.sum(np.logical_and(np.equal(y_true,1),np.equal(y_pred,0)))
print(TN)#false negative
FN = np.sum(np.logical_and(np.equal(y_true,0),np.equal(y_pred,0)))
print(FN)

2. Precision、Recall、Accuracy、Error rate、F1 Score(F Score,F Measure)

五个概念定义:

- precision = TP / (TP + FP)
- recall = TP / (TP + FN)
- accuracy = (TP + TN) / (TP + FP + TN + FN)
- error rate =  (FN + FP) / (TP + FP + TN + FN)
- F1 Score = 2*P*R/(P+R),其中P和R分别为 precision 和 recall

为什么要有F1 Score?也称F1 Measure,这是因为通常情况下,precision高的话,recall就会低;precision低的时候,recall往往比较高。为了权衡这种关系(tradeoff),所以有了F值。

=1时候,也就是我们常说的F1 Score。

 

此外,还有TPR(True Positive Rate,纵轴)与FPR(False Positive Rate,横轴)构成的ROC(Receiver Operating Characteristic)曲线,以及AUC(Area Under Curve),即ROC曲线下面的面积。
- TPR = Recall = TP / (TP + FN)
- FPR = FP / (TN + FP)

还有Precision(纵轴)和Recall(横轴)形成的PR曲线

 

代码实现:

#请先安装sklearn、numpy库
from sklearn.metrics import precision_score, recall_score, f1_score
import numpy as npy_true = np.array([[0, 1, 1],[0, 1, 0]])
y_pred = np.array([[1, 1, 1],[0, 0, 1]])y_true = np.reshape(y_true, [-1])
y_pred = np.reshape(y_pred, [-1])p = precision_score(y_true, y_pred, average='binary')
r = recall_score(y_true, y_pred, average='binary')
f1score = f1_score(y_true, y_pred, average='binary')print(p)
print(r)
print(f1score)

 

3.在推荐系统里实现precision、recall以及F1 Score:

R(u)表示根据用户在训练集上的行为给用户做出的Top-n推荐列表,

T(u)表示系统向用户推荐物品后,用户实际选择的物品集

 

 

def Precision_Recall_F1Score(train,test,N):hit = 0n_recall = 0n_precision = 0for user in train.keys():tu = test[user]rank = Recommend(user,N)for item ,pui in rank:if item in tu:hit += 1n_recall += len(tu)n_precision += Nrecall = hit / (1.0 * n_recall)precision = hit / (1.0 * n_precision)F1 = (2 * precision * recall) / (precision + recall)return [precision, recall, F1]

其中Recommend()函数为推荐算法,本文仅给出使用precision,recall以及F值来作为评测指标的代码实现部分

 

 

参考文献:

[1] https://www.cnblogs.com/jiangyi-uestc/p/6044282.html

[2] https://blog.csdn.net/blythe0107/article/details/75003890

[3] 项亮,陈义,王益,推荐系统实践[M]. 河北:人民邮电出版社, 2012:26-43

 

这篇关于Python3写精确率(precision)、召回率(recall)以及F1分数(F1_Score)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/730136

相关文章

【经典算法】LeetCode 22括号生成(Java/C/Python3/Go实现含注释说明,中等)

作者主页: 🔗进朱者赤的博客 精选专栏:🔗经典算法 作者简介:阿里非典型程序员一枚 ,记录在大厂的打怪升级之路。 一起学习Java、大数据、数据结构算法(公众号同名) ❤️觉得文章还不错的话欢迎大家点赞👍➕收藏⭐️➕评论,💬支持博主,记得点个大大的关注,持续更新🤞 ————————————————- 首先,请注意题目链接有误,您提供的链接是LeetCode 14,但题目

MacBook安装python3.x后如何使得在命令行里面python默认为3.x版本

MacBook的MacOsX系统自带有python2.7版本,但是现在的统计机器学习的算法库以及深度学习的大部分算法库已经逐渐抛弃python2.x版本,转向python3.x版本了。以tensorflow为例,原本的estimator库已经被v1所收纳。所以,在学习环境上安装python3.x版本从尝鲜变成了刚需。但是呢,网上有很多人都在说mac自带的python2.7版本服务于多个mac服务,

c#编程:有一个分数序列,2/1,3/2,5/3,8/5,13/8,21/13....找出数列的规律并求出其前30项的和

using System;using System.Collections.Generic;using System.Linq;using System.Text;//有一个分数序列,2/1,3/2,5/3,8/5,13/8,21/13....找出数列的规律并求出其前30项的和namespace ans1{class Program{static void Main(string[]

今天遇到的3到智力面试题(给工人分金条,小鸟来回在2火车之间飞行的距离,精确称水问题)

智力题1:你让工人为你工作7天,给工人的回报是一根金条。金条平分成相连的7段,你必须在每天结束时给他们一段金条,如果只许你两次把金条弄断,你如何给你的工人付费? 答:把金条2次弄断的方式是第一次1,6分,,然后把剩余的6用2,4分,即弄断2次为1段、2段、4段 第一天给1段, 第二天让工人把1段归还给2段, 第三天给1段, 第四天归还1段和2段,给4段。 第五天给1段, 第六天给2

同一台电脑安装python2和python3

Python 是一门很不错的语言,语言简单易学,又不失脚本语言的灵活性,还有海量的第三方库,覆盖的很全面。但也有不少“硬伤”,比如 Python 2.x 和 Python 3.x 版本之间的不兼容等等。 注:我的电脑是win10+64位 安装多版本python 1、安装python需要到官网下载安装包,官网  安装的过程不需要多说,记得两个版本的py分别安装在不同文件夹下

python3 IOT设备模拟器

由于公司快速发展,规模日益增长,敏捷开发和人员统筹就显得越来越重要。     最近,我们就遇到了一个问题。因为我们是做IOT安防设备类的,现在又面临一款IOT设备在异地研发,为了使app端不受制于固件端的研发进度,一个设备模拟器就显得尤为重要了。     大致要求如下:       1、使用mqtt接入服务端,代替某个IOT设备。       2、能自主定义IOT设备协议,而不需要

使用python3读取Excel,导出翻译供iOSAndroid使用

在日常工作中,我们在开发app的时候,经常有这么一种场景:     对于一个UI效果,如果存在多语言支持(国际化支持),我们往往希望事先在需要做翻译的地方标注对应的翻译标识符(这里我们称之为Key)。如果UI页面比较多的话,累积起来的Key就会很多。最后应用到项目中,我们就需要翻译人员针对每个Key给定不同语言下的显示值(这里我们称之为Value)。在一个项目中,如果翻译较多,涉及到的语言多的话

python3在本地安装自己开发的模块——windows篇

编写setup.py文件 # -*- coding: utf-8 -*-from os.path import dirname, joinfrom setuptools import find_packages, setupdef parse_requirements(filename):lineiter = (line.strip() for line in open(filename))r

python3加载字符串形式的python源代码

关于python动态加载模块,查到的大部分资料都是通过importlib加载本地python文件为新的模块。 现在的需求是,将写好的python代码存储到mysql数据库,然后通过web api读取出该python代码,但是不进行保存操作,而是想要直接加载该python代码为新的模块使用。 实现方式: def test():import typescode = """class Test(

python3 rsa加密

加密首先要有public key,如果加密后的内容用来做http请求,可能还需要对其quote一下。 def test():public_key = """-----BEGIN PUBLIC KEY-----*******MIICIjANBgkqhkiG9w*******-----END PUBLIC KEY-----"""import rsaimport base64from urlli