【机器学习】原理+实例, 一文掌握 精确率、召回率与F1分数,再也不迷路。

1、引言

小屌丝:鱼哥,你在给我详细的唠叨唠叨 精确率,召回率和F1分数。
小鱼:这…这不是机器学习基本知识吗
小屌丝:不就是基础没打好,所以才让你在给我唠叨一次。
小鱼:感情我这是循环播放器啊
小屌丝:鱼哥,那你就在播放一次。
小鱼:那可没时间
小屌丝:播放完,我们去…
小鱼:去哪里?干啥去?我可是正经人。
小屌丝:… 我也没说你不是正经人哦
小鱼:这… 还差不多。 我可不是为了那几张门票的!
小屌丝: 对对对
在这里插入图片描述

小鱼:看样子还不服气…
小屌丝:必须服气,你说的都对。
小鱼:这还差不多。

2、定义

2.1 精确率

精确率衡量的是被预测为正例的样本中实际为正例的比例。

它关注的是在模型预测为正例的样本中,有多少是真正的正例。

计算公式为:

Precision = TP TP + FP \text{Precision} = \frac{\text{TP}}{\text{TP} + \text{FP}} Precision=TP+FPTP

其中:

  • FP(False Positives):假正例,即实际为负例但被模型预测为正例的样本数。
  • 精确度越高,意味着模型预测为正例的样本中,误报的样本越少。

2.2 召回率

召回率也称为查全率,它衡量的是实际为正例的样本中被预测为正例的比例。换句话说,召回率关注的是在所有真正例(True Positives, TP)中,模型找出了多少真正例。

计算公式为:
Recall = TP TP + FN \text{Recall} = \frac{\text{TP}}{\text{TP} + \text{FN}} Recall=TP+FNTP
其中:

  • TP(True Positives):真正例,即实际为正例且被模型预测为正例的样本数。
  • FN(False Negatives):假反例,即实际为正例但被模型预测为负例的样本数。

2.3 F1分数

F1分数是召回率和精确度的调和平均数,用于综合评估模型的性能。

它旨在平衡召回率和精确度,因为有时单独优化其中一个指标可能会导致另一个指标的性能下降。

计算公式为:
F1 Score = 2 × Precision × Recall Precision + Recall \text{F1 Score} = 2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}} F1 Score=2×Precision+RecallPrecision×Recall

F1分数越高,意味着模型在召回率和精确度上都表现良好,综合性能较优

在这里插入图片描述

2.4 二分类任务

在机器学习的分类任务中,特别是二分类任务中,TP、FP、FN、TN 是四个常用的指标,用于描述模型预测结果与实际标签之间的关系

这四个指标的具体含义如下:

  • 真正例 (True Positive, TP):模型预测为正例,且实际标签也为正例的样本数。这些样本被模型正确地识别为正例。

  • 假正例 (False Positive, FP):模型预测为正例,但实际标签为负例的样本数。这些样本被模型错误地识别为正例,也称为误报。

  • 真反例 (True Negative, TN):模型预测为负例,且实际标签也为负例的样本数。这些样本被模型正确地识别为负例。

  • 假反例 (False Negative, FN):模型预测为负例,但实际标签为正例的样本数。这些样本被模型错误地识别为负例,也称为漏报。

这四个指标构成了一个混淆矩阵 (Confusion Matrix),它是评估分类模型性能的一种常用工具。

混淆矩阵可以直观地显示模型分类的详细结果,帮助分析模型的错误类型。

举个栗子
在这里插入图片描述

样本预测实际
1正例正例
2负例负例
3正例负例
4负例正例

在这个例子中:

  • 样本1是真正例(TP),因为模型预测为正例,实际也是正例。
  • 样本2是真反例(TN),因为模型预测为负例,实际也是负例。
  • 样本3是假正例(FP),因为模型预测为正例,但实际是负例。
  • 样本4是假反例(FN),因为模型预测为负例,但实际是正例。

计算召回率、精确度和F1分数:

  • 召回率 = TP / (TP + FN) = 1 / (1 + 1) = 0.5
  • 精确度 = TP / (TP + FP) = 1 / (1 + 1) = 0.5
  • F1分数 = 2 * (精确度 * 召回率) / (精确度 + 召回率) = 2 * (0.5 * 0.5) / (0.5 + 0.5) = 0.5

2.5 代码示例

# -*- coding:utf-8 -*-
# @Time   : 2024-01-21
# @Author : Carl_DJ

'''
实现功能:
    基于二分类任务,使用scikit-learn库来计算并展示召回率、精确度和F1分数

'''

from sklearn.metrics import precision_score, recall_score, f1_score, confusion_matrix, accuracy_score  
  
# 假设我们有以下预测结果和实际标签  
y_true = [0, 1, 1, 0, 1, 1, 0, 0, 1, 1]  # 实际标签  
y_pred = [0, 1, 0, 0, 0, 1, 1, 0, 1, 1]  # 模型预测结果  
  
# 计算混淆矩阵  
cm = confusion_matrix(y_true, y_pred)  
print("混淆矩阵:")  
print(cm)  
  
# 计算召回率  
recall = recall_score(y_true, y_pred)  
print(f"召回率 (Recall): {recall}")  
  
# 计算精确度  
precision = precision_score(y_true, y_pred)  
print(f"精确度 (Precision): {precision}")  
  
# 计算F1分数  
f1 = f1_score(y_true, y_pred)  
print(f"F1分数 (F1 Score): {f1}")  
  
# 计算准确率  
accuracy = accuracy_score(y_true, y_pred)  
print(f"准确率 (Accuracy): {accuracy}")  
  
# 解释混淆矩阵  
tp, fp, fn, tn = cm.ravel()  
print(f"真正例 (TP): {tp}")  
print(f"假正例 (FP): {fp}")  
print(f"假反例 (FN): {fn}")  
print(f"真反例 (TN): {tn}")  
  
# 根据混淆矩阵解释召回率和精确度  
print(f"召回率 = TP / (TP + FN) = {tp} / ({tp + fn}) = {recall}")  
print(f"精确度 = TP / (TP + FP) = {tp} / ({tp + fp}) = {precision}")  
  
# F1分数的公式  
print(f"F1分数 = 2 * (精确度 * 召回率) / (精确度 + 召回率) = 2 * ({precision} * {recall}) / ({precision} + {recall}) = {f1}")

运行结果

混淆矩阵:  
 [[3 1]  
 [1 5]]  
召回率 (Recall): 0.8333333333333334  
精确度 (Precision): 0.8333333333333334  
F1分数 (F1 Score): 0.8333333333333334  
准确率 (Accuracy): 0.8  
真正例 (TP): 5  
假正例 (FP): 1  
假反例 (FN): 1  
真反例 (TN): 3  
召回率 = TP / (TP + FN) = 5 / (5 + 1) = 0.8333333333333334  
精确度 = TP / (TP + FP) = 5 / (5 + 1) = 0.8333333333333334  
F1分数 = 2 * (精确度 * 召回率) / (精确度 + 召回率) = 2 * (0.8333333333333334 * 0.8333333333333334) / (0.8333333333333334 + 0.8333333333333334) = 0.8333333333333334

3、总结

我是小鱼

  • CSDN 博客专家
  • 阿里云 专家博主
  • 51CTO博客专家
  • 企业认证金牌面试官
  • 多个名企认证&特邀讲师等
  • 名企签约职场面试培训、职场规划师
  • 多个国内主流技术社区的认证专家博主
  • 多款主流产品(阿里云等)测评一、二等奖获得者

关注小鱼,学习【机器学习】&【深度学习】知识,不再迷路。

  • 31
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
精确率(Precision)和召回率(Recall),还有F1分数是在信息检索和机器学习领域中常用的评估指标,用来衡量分类模型的性能。 精确率是指在所有被分类为正例中,真实正例的比例。公式为:精确率 = 真正例 / (真正例 + 假正例)。 召回率是指在所有真实正例中,被正确分类为正例的比例。公式为:召回率 = 真正例 / (真正例 + 假负例)。 F1分数是综合了精确率召回率的指标,它是精确率召回率的调和平均值。公式为:F1分数 = 2 * (精确率 * 召回率) / (精确率 + 召回率)。 举个例子来说明: 假设一个分类模型用于判断垃圾邮件,它将某个邮件分类为垃圾邮件的概率为0.8。如果我们设置一个阈值,只有当概率大于等于该阈值时才将其分类为垃圾邮件。我们将10封邮件分类结果如下: 真实情况:5封垃圾邮件,5封非垃圾邮件 分类结果:3封垃圾邮件,7封非垃圾邮件 那么,我们可以计算精确率召回率如下: 精确率 = 3 / (3 + 7) = 0.3 召回率 = 3 / (3 + 2) = 0.6 根据精确率召回率的计算结果,我们可以得到F1分数如下: F1分数 = 2 * (0.3 * 0.6) / (0.3 + 0.6) = 0.375 因此,这个分类模型的精确率为0.3,召回率为0.6,F1分数为0.375。F1分数综合了精确率召回率的性能评估,可以更全面地衡量模型的准确性和覆盖率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [机器学习面试题集-图解准确率,精确率召回率](https://blog.csdn.net/weixin_42137700/article/details/90368579)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [正确率、召回率、F值例子](https://blog.csdn.net/yangfengling1023/article/details/84104662)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Carl_奕然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值