计算二分类模型的精确率与召回率

题目

在机器学习二分类问题中,我们通常需要评估模型的性能。假设我们正在开发一个医疗诊断系统,用于判断患者是否患有某种疾病(正类)或健康(负类)。
给定两个整数数组:

  • y_true: 真实标签数组,其中 1 表示正类(患病),0 表示负类(健康)
  • y_pred: 模型预测结果数组,其中 1 表示预测为正类,0 表示预测为负类

请编写一个函数来计算该分类模型的精确率和召回率(又称为查准率和查全率)。

不允许使用python库函数计算查准率和查全率。发现记零分

背景知识

混淆矩阵
在二分类问题中,预测结果可以分为四种情况:
真正例 (True Positive, TP): 真实为正类,预测为正类
假正例 (False Positive, FP): 真实为负类,预测为正类
真负例 (True Negative, TN): 真实为负类,预测为负类
假负例 (False Negative, FN): 真实为正类,预测为负类
计算公式

  1. 精确率 (Precision)
    含义: 在所有被预测为正类的样本中,真正为正类的比例。衡量模型的"准度"。
    Precision = TP / (TP + FP)

  2. 召回率 (Recall)
    含义: 在所有真实为正类的样本中,被正确预测为正类的比例。衡量模型的"查全率"。
    Recall = TP / (TP + FN)

这道题不是算法相关的,只是我的一个作业。借着本篇的机会,我来说说目前作为大三的我目前的状况吧,这样感觉有点像在写日记,不过又没说csdn上的博客只能发专业相关的内容,当微博发也没人管的着吧!

目前大三,计算机专业,觉得学校专业课没意义,于是一节专业课都没打算上,但是作为补充,我需要在本学期完成三到四个项目,这是作为不上课的交换,我不可能一边不上课,一边混子,这样的生活在中国会相当难受。项目都在初期,但是都搞得我很焦躁,因为都是跟着ai干的,目前没有任何产出,做一件事如果长期没有正反馈是很抑郁的,所以我打算在之后也更新一点博客内容在本账号,如果真有一天项目差不多完结了,或许我还会在b站上分享吧,这都是后话了。

平常还有要准备其他东西,考研的东西啦,英语的啦,大三还谈恋爱了,这些都需要我去花经历经营,就是最近这个干劲好像没有说特别足了,一个人如果能持之以恒地干一件事,那真是特别厉害。

总之生活就是这样,还是做题吧,前面一直在发算法相关的,不知道的真以为是机器人呢哈哈哈哈哈

这道题只需要照着概念复现一边即可,就是python的写法我有点不熟悉。

python 复制代码
def calc_precision_recall():

python是这样创建函数的,这样单拎一条说感觉这人特别小白,但是没办法,第一时间没想到的东西,就是要重复强调

python 复制代码
    n = int(input())
    y_true = list(map(int, input().split()))
    y_pred = list(map(int, input().split()))

这样获取数据,注意python注重的空格

input().split()分割得到 ["1","1","1","0","0"](类似这样的)

map把列表里每一个字符串,批量转成整数

list把 map 对象转换成 Python 列表 list

python 复制代码
for true, pred in zip(y_true, y_pred):
        if true == 1 and pred == 1:
            TP += 1
        elif true == 0 and pred == 1:
            FP += 1
        elif true == 1 and pred == 0:
            FN += 1

zip(y_true, y_pred)y_true 是真实标签列表,y_pred 是预测标签列表。 zip 会成对取出两个数组里位置相同的元素。

true来自y_true pred来自y_pred

其他的没啥好说的。

python 复制代码
def calc_precision_recall():
    # 读取输入
    n = int(input())
    y_true = list(map(int, input().split()))
    y_pred = list(map(int, input().split()))
    
    TP = 0
    FP = 0
    FN = 0
    
    for true, pred in zip(y_true, y_pred):
        if true == 1 and pred == 1:
            TP += 1
        elif true == 0 and pred == 1:
            FP += 1
        elif true == 1 and pred == 0:
            FN += 1
    
    # 计算精确率,防止分母为0
    precision = TP / (TP + FP) if (TP + FP) != 0 else 0.0
    # 计算召回率,防止分母为0
    recall = TP / (TP + FN) if (TP + FN) != 0 else 0.0
    
    # 格式化输出,保留2位小数,中间用-分隔
    print("{0:.2f}-{1:.2f}".format(precision, recall))

calc_precision_recall()
相关推荐
计算机源码社3 小时前
27届计算机毕设源码|基于Python的黄金价格特征分布与周期聚类可视化研究 基于大数据技术的黄金价格历史演变规律与波动特征研究
大数据·数据挖掘·数据分析
Daorigin_com4 小时前
道本科技携手DeepSeek:以AI重塑合同全生命周期管理
前端·人工智能·科技·网络安全·数据挖掘·前端框架·传媒
BullSmall6 小时前
全套补充材料:评测报告模板 + Bad Case 分类方案 + 评测数据集构建规范
人工智能·分类·数据挖掘
千里码aicood18 小时前
基于CART算法的图书分类系统设计与实现
数据库·算法·分类
kaiyou202621 小时前
数据分析岗面试,如何把考证学到的知识讲成业务案例?
面试·数据挖掘·数据分析
千里码aicood21 小时前
基于DenseNet的皮肤病变分类算法设计与实现
人工智能·分类·数据挖掘
2601_962177301 天前
小白安装Claude Code完整教程:Windows从零装好并接入Crazyrouter(附403解决方法)
人工智能·深度学习·目标检测·机器学习·数据挖掘
2601_962780911 天前
用户研究校招备考路线|问卷、访谈、可用性测试项目与数据分析工具
数据挖掘·数据分析·可用性测试
uncle_ll1 天前
分类任务解决样本数据不均衡的落地实战指南
人工智能·深度学习·机器学习·分类·数据处理