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

相关文章

Python3中Sanic中间件的使用

《Python3中Sanic中间件的使用》Sanic框架中的中间件是一种强大的工具,本文就来介绍Python3中Sanic中间件的使用,具有一定的参考价值,感兴趣的可以了解一下... 目录Sanic 中间件的工作流程中间件的使用1. 全局中间件2. 路由中间件3. 异常处理中间件4. 异步中间件5. 优先级

poj 2976 分数规划二分贪心(部分对总体的贡献度) poj 3111

poj 2976: 题意: 在n场考试中,每场考试共有b题,答对的题目有a题。 允许去掉k场考试,求能达到的最高正确率是多少。 解析: 假设已知准确率为x,则每场考试对于准确率的贡献值为: a - b * x,将贡献值大的排序排在前面舍弃掉后k个。 然后二分x就行了。 代码: #include <iostream>#include <cstdio>#incl

Python3 BeautifulSoup爬虫 POJ自动提交

POJ 提交代码采用Base64加密方式 import http.cookiejarimport loggingimport urllib.parseimport urllib.requestimport base64from bs4 import BeautifulSoupfrom submitcode import SubmitCodeclass SubmitPoj():de

856. Score of Parentheses

856. Score of Parentheses class Solution:def scoreOfParentheses(self, s: str) -> int:stack=[]i=0for c in s:if c=='(':stack.append(c)else:score=0while stack[-1]!='(':score+=stack.pop()stack.pop()score

Python安装:Mac 使用brew 安装Python2 和 Python3

安装python ## python2brew install python ## python3brew install python3 出现错误 Error: An unexpected error occurred during the `brew link` stepThe formula built, but is not symlinked into /usr/loc

Python: #!/usr/bin/python3 #!/usr/bin/env python3

只能放在第一行,第二行就没有效果了。 1. 路径不同 #!/usr/bin/python3&& #!/usr/bin/env python3写在脚本语言第一行的目的是 想要以什么可执行程序去运行这个文件中的代码。 #!/usr/bin/python3是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python3解释器; #!/usr/bin/env python3这种用法是为了

Linux搭建Python3、Django环境

开发十年,就只剩下这套架构体系了! >>>    好久没写了,朋友们,我又回来了。 安装Python3 Python全部版本下载地址:         https://www.python.org/ftp/ 解决RedHat,使用Python3退格出现乱码问题:         yum -y install readline-devel.x86_64 下载Python3:

ubuntu 安装python3 教程

本篇教程,主要介绍如何在Ubuntu上安装python3教程。 1、查看是否有python 在安装前,首先看看自己系统上,是否存在python环境,可能有些系统,默认就安装过python,如果已经有python了,可以直接跳过安装教程。 2、安装步骤 apt update && apt install -y python3 python3-pip

[C/C++入门][进制原理]31、求分数序列和

题目来自于信息学奥赛 1078 分析: 这道题看起来比较复杂,实际上只需要通过两个公式,一次性求出分母和分子,然后把这个求出来的数加入到变量和中。甚至都不需要知道总共游哪些数。数组都用不上。循环就能解决。 #include <iostream>#include <iomanip> // 用于格式化输出using namespace std;int main() {double s

【python requests警告】python3.x requests库取消ssl验证,InsecureRequestWarning: Unverified HTTPS request is be

警告信息: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warni