深度学习评价指标:Precision, Recall, F1-score, mIOU, 和 mDice

news2024/11/23 15:45:10

在深度学习和机器学习中,评价模型性能是至关重要的一环。本文将详细讲解一些常见的评价指标,包括精确率(Precision)、召回率(Recall)、F1-score、平均交并比(mIOU)和平均Dice系数(mDice)。这些指标广泛应用于分类和语义分割任务中。

1. 精确率(Precision)

精确率是指在所有被模型预测为正类的样本中,真正为正类的比例。其计算公式为:

[ \text{Precision} = \frac{TP}{TP + FP} ]

其中,TP(True Positive)是真正类,FP(False Positive)是假正类。

代码示例:
import numpy as np
from sklearn.metrics import precision_score

# 模拟一些预测标签和真实标签
y_true = np.array([0, 1, 1, 1, 0, 1, 0, 0, 1, 0])  # 真实标签
y_pred = np.array([0, 1, 0, 1, 0, 1, 0, 1, 1, 0])  # 预测标签

# 计算Precision
def calculate_precision(y_true, y_pred):
    precision = precision_score(y_true, y_pred)
    return precision

precision = calculate_precision(y_true, y_pred)
print(f"Precision: {precision:.2f}")

2. 召回率(Recall)

召回率是指在所有实际为正类的样本中,被模型正确预测为正类的比例。其计算公式为:

[ \text{Recall} = \frac{TP}{TP + FN} ]

其中,FN(False Negative)是假负类。

代码示例:
import numpy as np
from sklearn.metrics import recall_score

y_true = np.array([0, 1, 1, 1, 0, 1, 0, 0, 1, 0])  # 真实标签
y_pred = np.array([0, 1, 0, 1, 0, 1, 0, 1, 1, 0])  # 预测标签

def calculate_recall(y_true, y_pred):
    recall = recall_score(y_true, y_pred)
    return recall

recall = calculate_recall(y_true, y_pred)
print(f"Recall: {recall:.2f}")

3. F1-score

F1-score是精确率和召回率的调和平均数,其公式为:

[ \text{F1分数} = 2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}} ]

代码示例:
import numpy as np
from sklearn.metrics import precision_score, recall_score, f1_score

y_true = np.array([0, 1, 1, 1, 0, 1, 0, 0, 1, 0])  # 真实标签
y_pred = np.array([0, 1, 0, 1, 0, 1, 0, 1, 1, 0])  # 预测标签

def calculate_f1_score(y_true, y_pred):
    precision = precision_score(y_true, y_pred)
    recall = recall_score(y_true, y_pred)
    f1 = f1_score(y_true, y_pred)
    return f1

f1 = calculate_f1_score(y_true, y_pred)
print(f"F1 Score: {f1:.2f}")

4. 平均交并比(mIOU)

平均交并比(mIOU)是语义分割任务中常用的评价指标,计算公式为:

[ \text{IOU} = \frac{\text{交集}}{\text{并集}} ]

在多类语义分割中,mIOU是对每个类别的IOU取平均。公式如下:

[ \text{mIOU} = \frac{1}{C} \sum_{i=1}^{C} \text{IOU}_i ]

代码示例:
import numpy as np
from sklearn.metrics import confusion_matrix

def calculate_iou(conf_matrix):
    intersection = np.diag(conf_matrix)
    ground_truth_set = conf_matrix.sum(axis=1)
    predicted_set = conf_matrix.sum(axis=0)
    union = ground_truth_set + predicted_set - intersection
    iou = intersection / union
    return iou

def calculate_miou(y_true, y_pred, num_classes):
    conf_matrix = confusion_matrix(y_true, y_pred, labels=np.arange(num_classes))
    iou = calculate_iou(conf_matrix)
    miou = np.nanmean(iou)
    return miou

# 模拟数据
y_true = np.array([0, 1, 1, 2, 2, 2, 0, 1, 0, 2])
y_pred = np.array([0, 1, 0, 2, 1, 2, 0, 2, 0, 2])
num_classes = 3  # 类别数量

miou = calculate_miou(y_true, y_pred, num_classes)
print(f"mIOU: {miou:.2f}")

5. 平均Dice系数(mDice)

平均Dice系数(mDice)是衡量模型在分割任务中的效果,其公式为:

[ \text{Dice} = \frac{2 \times \text{交集}}{\text{真实标签的像素数} + \text{预测标签的像素数}} ]

在多类语义分割中,mDice是对每个类别的Dice系数取平均。公式如下:

[ \text{mDice} = \frac{1}{C} \sum_{i=1}^{C} \text{Dice}_i ]

代码示例:
import numpy as np
from sklearn.metrics import confusion_matrix

def calculate_dice(conf_matrix):
    intersection = np.diag(conf_matrix)
    ground_truth_set = conf_matrix.sum(axis=1)
    predicted_set = conf_matrix.sum(axis=0)
    dice = (2 * intersection) / (ground_truth_set + predicted_set)
    return dice

def calculate_mdice(y_true, y_pred, num_classes):
    conf_matrix = confusion_matrix(y_true, y_pred, labels=np.arange(num_classes))
    dice = calculate_dice(conf_matrix)
    mdice = np.nanmean(dice)
    return mdice

# 模拟数据
y_true = np.array([0, 1, 1, 2, 2, 2, 0, 1, 0, 2])
y_pred = np.array([0, 1, 0, 2, 1, 2, 0, 2, 0, 2])
num_classes = 3  # 类别数量

mdice = calculate_mdice(y_true, y_pred, num_classes)
print(f"mDice: {mdice:.2f}")

总结

  • 精确率(Precision):衡量模型预测的正类样本中实际为正类的比例。
  • 召回率(Recall):衡量模型对实际正类样本的识别能力。
  • F1-score:精确率和召回率的调和平均数。
  • 平均交并比(mIOU):衡量模型在语义分割任务中的整体性能。
  • 平均Dice系数(mDice):衡量模型在分割任务中的效果,尤其对小目标更加敏感。

通过理解和应用这些评价指标,可以更全面地评估模型的性能,从而更好地改进模型。如果有任何问题或需要进一步的解释,欢迎在评论区留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1879936.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ConcurrentHashMap是如何保证线程安全的-put方法简要分析

简介 ConcurrentHashMap 是 Java 中并发编程中常用的线程安全的哈希表(HashMap)实现。它具有以下几个显著的特点和优点,适合在特定的并发场景中使用: 线程安全性: ConcurrentHashMap 提供了并发访问的线程安全保证&am…

AWT的菜单组件

AWT的菜单组件 前言一、菜单组件的介绍常见的菜单相关组件常见菜单相关组件集成体系图菜单相关组件使用小要点 二、AWT菜单组件的代码示例示例一示例二实现思路 前言 推荐一个网站给想要了解或者学习人工智能知识的读者,这个网站里内容讲解通俗易懂且风趣幽默&…

高考结束,踏上西北的美食之旅

高考的帷幕落下,暑期的阳光洒来,是时候放下书本,背上行囊,踏上一场充满期待的西北之旅。而在甘肃这片广袤的土地上,除了壮丽的自然风光,还有众多令人垂涎欲滴的美食等待着您的品尝。当您踏入甘肃&#xff0…

创建一个vue3+vite+ts项目

目录 创建项目 ​编辑 下载jsx 插件 在根目录在新建.env vue.config.js tsconfig.json tsconfig.node.json 下载ui组件库和路由(组件库根据自己的项目需要选择) 在根目录下新建views/index.tsx 在根目录下新建router/index.ts 修改App.vue 创建…

【C++】C++ 网店销售库存管理系统(源码+论文)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

K8S之网络深度剖析(一)(持续更新ing)

K8S之网络深度剖析 一 、关于K8S的网络模型 在K8s的世界上,IP是以Pod为单位进行分配的。一个Pod内部的所有容器共享一个网络堆栈(相当于一个网络命名空间,它们的IP地址、网络设备、配置等都是共享的)。按照这个网络原则抽象出来的为每个Pod都设置一个IP地址的模型也被称作为I…

What does the error ‘module ‘langchain‘ has no attribute ‘verbose‘ refer to?

题意:错误 module langchain has no attribute verbose 指的是什么意思? 问题背景: Kind of new to Langchain/Qdrant but Im building a recommendation engine to recommend users based on the contents of their associated PDF files, …

Docker配置远程连接

前置条件:docker所在的服务器开放2375端口 文件:/usr/lib/systemd/system/docker.service 节点ExecStart 追加 -H tcp://0.0.0.0:2375

allure安装教程

1、下载 allure的官网下载地址: https://github.com/allure-framework/allure2/releases 注意:官网时常访问失败,可以访问以下网址: https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/ 选择一个版本&…

岗位实习最终篇(汇总)——人力资源管理系统(包含DDL,DML,视图,简单/复杂查询,触发器语句和存储过程语句)

DDL CREATE TABLE users (user_id INT AUTO_INCREMENT PRIMARY KEY COMMENT 员工ID,username VARCHAR(50) NOT NULL UNIQUE COMMENT 用户名,password VARCHAR(255) NOT NULL COMMENT 密码,first_name VARCHAR(50) NOT NULL COMMENT 名,last_name VARCHAR(50) NOT NULL COMMENT…

leetCode.97. 交错字符串

leetCode.97. 交错字符串 题目思路 代码 class Solution { public:bool isInterleave(string s1, string s2, string s3) {int n s1.size(), m s2.size();if ( s3.size() ! n m ) return false;vector<vector<bool>> f( n 1, vector<bool> (m 1));s1 …

【大数据导论】大数据序言

各位大佬好 &#xff0c;这里是阿川的博客&#xff0c;祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 目录 数据概念及类型及可用及组织形式数据概念数据…

阿里云oss实现图片上传

Bucket&#xff1a;存储空间是用户用于存储对象&#xff08;Object&#xff0c;就是文件&#xff09;的容器&#xff0c;所有的对象都必须隶属于某个存储空间。 SDK&#xff1a;Software Development Kit 的缩写&#xff0c;软件开发工具包&#xff0c;包括辅助软件开发的依赖…

黄冈师范学院2024年成人高等继续教育招生简章

黄冈师范学院&#xff0c;这座矗立在湖北黄冈的教育殿堂&#xff0c;以其深厚的文化底蕴和卓越的教学质量&#xff0c;吸引了无数求学者。如今&#xff0c;随着社会的快速发展和教育的不断进步&#xff0c;黄冈师范学院再次敞开怀抱&#xff0c;热烈迎接2024年成人高等继续教育…

详解flink sql, calcite logical转flink logical

文章目录 背景示例FlinkLogicalCalcConverterBatchPhysicalCalcRuleStreamPhysicalCalcRule其它算子FlinkLogicalAggregateFlinkLogicalCorrelateFlinkLogicalDataStreamTableScanFlinkLogicalDistributionFlinkLogicalExpandFlinkLogicalIntermediateTableScanFlinkLogicalInt…

原来“山水博客“的分类也是可以拖动排序的

这二天一直用“山水博客”写文章&#xff0c;发现一个问题&#xff0c;好象它的分类不能调整位置&#xff0c;这可是个大bug。首先&#xff0c;界面上没发现拖动相关按钮&#xff1b;如果按住分类拖动&#xff0c;会成这样&#xff1a; 后来仔细看了它的文档&#xff0c;发现它…

弹性力学讲义

弹性力学讲义 1. 基本假设和一些概念2. 应力3. 二维应力状态与摩尔库伦屈服准则 1. 基本假设和一些概念 力学&#xff1a;变形体力学–固体力学和流体力学&#xff08;连续介质力学&#xff09; 刚体力学–理论力学&#xff08;一般力学&#xff09; 物理受理后&#xff1a;要…

Forecasting from LiDAR via Future Object Detection

Forecasting from LiDAR via Future Object Detection 基础信息 论文&#xff1a;cvpr2022paper https://openaccess.thecvf.com/content/CVPR2022/papers/Peri_Forecasting_From_LiDAR_via_Future_Object_Detection_CVPR_2022_paper.pdfgithub&#xff1a;https://github.co…

聚焦 HW 行动,构筑重保邮件安全防线

随着信息技术的飞速发展&#xff0c;网络安全已成为国家安全的重要组成部分。HW行动作为国家级网络安全演练&#xff0c;通过模拟实战攻防&#xff0c;检验和提升国家关键信息基础设施的防护能力。 CACTER凭借多年HW防护经验&#xff0c;提供全面的邮件安全防护体系&#xff0…

RPC远程过程调用--Thrift

RPC远程过程调用–Thrift 简介 Thrift是一个由Facebook开发的轻量级、跨语言的远程服务调用框架&#xff0c;后进入Apache开源项目。支持通过自身接口定义语言IDL定义RPC接口和数据类型&#xff0c;然后通过编译器生成不同语言代码&#xff0c;用于构建抽象易用、可互操作的R…