深度学习PyTorch之13种模型精度评估公式及调用方法

深度学习pytorch之22种损失函数数学公式和代码定义
深度学习pytorch之19种优化算法(optimizer)解析
深度学习pytorch之4种归一化方法(Normalization)原理公式解析和参数使用
深度学习pytorch之简单方法自定义9类卷积即插即用
实时语义分割之BiSeNetv2(2020)结构原理解析及建筑物提取实践

文章目录

  • 摘要
    • 1. Accuracy Score
    • 2. Balanced Accuracy
    • 3. Brier Score Loss
    • 4. Cohen's Kappa
    • 5. F1/F-beta Score
    • 6. Hamming Loss
    • 7. Hinge Loss
    • 8. Jaccard Score
    • 9. Log Loss
    • 10. Matthews Correlation
    • 11. Precision
    • 12. Recall
    • 13. Zero-One Loss
  • 关键参数说明
  • 可执行代码示例

摘要

模型训练后需要评估模型性能,因此需要了解各种评估指标的具体用法和背后的数学原理,本博客以清晰的格式呈现分类任务评估指标的名称、调用示例、公式说明。

1. Accuracy Score

调用方式:

from sklearn.metrics import accuracy_score
acc = accuracy_score(y_true, y_pred, normalize=True, sample_weight=None)

公式:

Accuracy = (TP + TN) / (TP + TN + FP + FN)

2. Balanced Accuracy

调用方式:

from sklearn.metrics import balanced_accuracy_score
bal_acc = balanced_accuracy_score(y_true, y_pred, sample_weight=None, adjusted=False)

公式:

Balanced Accuracy = (Recall_Class1 + Recall_Class2 + … +Recall_ClassN) / N
调整后版本:BalancedAcc_adj = (BalancedAcc - 1/N) / (1 -1/N)

3. Brier Score Loss

调用方式:

from sklearn.metrics import brier_score_loss
brier = brier_score_loss(y_true, y_prob, sample_weight=None, pos_label=1)

公式:

Brier Score = 1/N * Σ(y_true_i - y_prob_i)^2

(适用于概率预测的校准度评估)

4. Cohen’s Kappa

调用方式:

from sklearn.metrics import cohen_kappa_score
kappa = cohen_kappa_score(y1, y2, labels=None, weights=None, sample_weight=None)

公式:

κ = (p_o - p_e) / (1 - p_e) 其中 p_o 为观察一致率,p_e 为期望一致率

5. F1/F-beta Score

调用方式:

from sklearn.metrics import f1_score, fbeta_score
f1 = f1_score(y_true, y_pred, average='weighted', zero_division=0)
fbeta = fbeta_score(y_true, y_pred, beta=0.5, average='macro')

公式:

Fβ = (1 + β²) * (precision * recall) / (β² * precision + recall) 当 β=1
时为 F1 Score

6. Hamming Loss

调用方式:

from sklearn.metrics import hamming_loss
hamming = hamming_loss(y_true, y_pred, sample_weight=None)

公式:

Hamming Loss = 1/N * Σ(预测错误的标签数 / 总标签数) (多标签任务专用)

7. Hinge Loss

调用方式:

from sklearn.metrics import hinge_loss
hinge = hinge_loss(y_true, pred_decision, labels=None, sample_weight=None)

公式:

Hinge Loss = max(0, 1 - y_true * pred_decision) 的平均值 (SVM模型常用)

8. Jaccard Score

调用方式:

from sklearn.metrics import jaccard_score
jaccard = jaccard_score(y_true, y_pred, average='samples')

公式:

Jaccard = TP / (TP + FP + FN)

即IOU,多用于图像分割评估

9. Log Loss

调用方式:

from sklearn.metrics import log_loss
logloss = log_loss(y_true, y_pred, eps=1e-15, normalize=True, labels=None)

公式:

Log Loss = -1/N * Σ[y_true_i * log(y_pred_i) + (1-y_true_i) *log(1-y_pred_i)]

交叉熵损失,需概率预测输入

10. Matthews Correlation

调用方式:

from sklearn.metrics import matthews_corrcoef
mcc = matthews_corrcoef(y_true, y_pred, sample_weight=None)

公式:

MCC = (TPTN - FPFN) / √((TP+FP)(TP+FN)(TN+FP)(TN+FN))

适用于类别不平衡的二分类

11. Precision

调用方式:

from sklearn.metrics import precision_score
precision = precision_score(y_true, y_pred, average='weighted', zero_division=0)

公式:

Precision = TP / (TP + FP)

12. Recall

调用方式:

from sklearn.metrics import recall_score
recall = recall_score(y_true, y_pred, average='macro', zero_division=0)

公式:

Recall = TP / (TP + FN)

13. Zero-One Loss

调用方式:

from sklearn.metrics import zero_one_loss
zero_one = zero_one_loss(y_true, y_pred, normalize=True)

公式:

Zero-One Loss = 1 - Accuracy

直接统计错误预测比例

关键参数说明

参数说明
average计算方式:None(各类单独计算)、‘micro’(全局统计)、‘macro’(各类平均)、‘weighted’(按支持数加权)
zero_division处理除零情况:0(返回0)、1(返回1)或’warn’(返回0并警告)
sample_weight样本权重数组
pos_label指定正类标签(仅二分类有效)
labels指定要评估的类别列表
betaF-beta中召回率的权重(>1侧重召回率,<1侧重精确率)

可执行代码示例

以下程序采用常用的accuracy, precision, recall, f1对分类结果进行评估,注意替换下列文件夹,两个文件夹内均为8位单波段影像,采用相同命名。

  • label_dir = ‘label’ # 替换为实际路径
  • pred_dir = ‘pred’ # 替换为实际路径
import os
import numpy as np
from PIL import Image
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_auc_score
import matplotlib.pyplot as plt


def load_images_and_labels(label_dir, pred_dir):
    """
    读取标签图像和预测图像,假设它们的像素值代表类别标签。
    :param label_dir: 实际标签图像的文件夹路径
    :param pred_dir: 预测标签图像的文件夹路径
    :return: 实际标签和预测标签的列表
    """
    labels = []
    preds = []

    # 获取文件列表
    label_files = sorted(os.listdir(label_dir))
    pred_files = sorted(os.listdir(pred_dir))

    # 遍历每个图像文件加载标签和预测
    for label_file, pred_file in zip(label_files, pred_files):
        label_path = os.path.join(label_dir, label_file)
        pred_path = os.path.join(pred_dir, pred_file)

        # 加载图像并转换为灰度
        label_img = Image.open(label_path).convert('L')  # 灰度图
        pred_img = Image.open(pred_path).convert('L')  # 灰度图

        # 假设灰度值代表类标签
        label = np.array(label_img)
        pred = np.array(pred_img)

        # 扁平化数组,以便计算评估指标
        labels.extend(label.flatten())
        preds.extend(pred.flatten())

    return np.array(labels), np.array(preds)


def evaluate_model(labels, preds):
    """
    计算模型的评估指标
    :param labels: 实际标签
    :param preds: 预测标签
    """
    # 计算评估指标
    accuracy = accuracy_score(labels, preds)
    precision = precision_score(labels, preds, average='weighted', zero_division=0)
    recall = recall_score(labels, preds, average='weighted', zero_division=0)
    f1 = f1_score(labels, preds, average='weighted', zero_division=0)


    # 打印评估指标
    print(f"Accuracy: {accuracy:.4f}")
    print(f"Precision: {precision:.4f}")
    print(f"Recall: {recall:.4f}")
    print(f"F1 Score: {f1:.4f}")


    # 可选:绘制混淆矩阵
    from sklearn.metrics import confusion_matrix
    import seaborn as sns
    cm = confusion_matrix(labels, preds)
    sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=np.unique(labels), yticklabels=np.unique(labels))
    plt.title('Confusion Matrix')
    plt.xlabel('Predicted')
    plt.ylabel('True')
    plt.show()


if __name__ == "__main__":
    # 设置实际标签和预测标签的文件夹路径
    label_dir = 'label'  # 替换为实际路径
    pred_dir = 'pred'  # 替换为实际路径

    # 加载标签和预测数据
    labels, preds = load_images_and_labels(label_dir, pred_dir)

    # 评估模型
    evaluate_model(labels, preds)

输出结果:
Accuracy: 0.9681
Precision: 0.9686
Recall: 0.9681
F1 Score: 0.9683

绘制混淆矩阵:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Gartner发布2025年网络安全六大预测

文章目录 前言趋势1&#xff1a;生成式AI推动数据安全计划趋势2&#xff1a;管理机器身份趋势3&#xff1a;战术型AI趋势4&#xff1a;优化网络安全技术趋势5&#xff1a;扩大安全行为与文化计划的价值趋势6&#xff1a;应对网络安全倦怠 前言 Gartner发布2025年网络安全六大预…

WPS Word中英文混杂空格和行间距不一致调整方案

文章目录 问题1&#xff1a;在两端对齐的情况下&#xff0c;如何删除参考文献&#xff08;英文&#xff09;的空格问题2&#xff1a;中英文混杂行间距不一致问题问题3&#xff1a;设置中文为固定字体&#xff0c;设置西文为固定字体参考 问题1&#xff1a;在两端对齐的情况下&a…

代码随想录算法训练营第22天 | 组合 组合总和 电话号码的字母组合

77. 组合 77. 组合 - 力扣&#xff08;LeetCode&#xff09; class Solution {List<Integer> path new ArrayList<>();List<List<Integer>> result new ArrayList<>();public void backTracking(int n,int k,int startIndex){if(path.size() …

Hadoop、Hive、Spark的关系

Part1&#xff1a;Hadoop、Hive、Spark关系概览 1、MapReduce on Hadoop 和spark都是数据计算框架&#xff0c;一般认为spark的速度比MR快2-3倍。 2、mapreduce是数据计算的过程&#xff0c;map将一个任务分成多个小任务&#xff0c;reduce的部分将结果汇总之后返回。 3、HIv…

从0开始的操作系统手搓教程21:进程子系统的一个核心功能——简单的进程切换

目录 具体说说我们的简单RR调度 处理时钟中断处理函数 调度器 schedule switch_to 我们下面&#xff0c;就要开始真正的进程切换了。在那之前&#xff0c;笔者想要说的是——我们实现的进程切换简单的无法再简单了——也就是实现一个超级简单的轮询调度器。 每一个进程按照…

EP 架构:未来主流方向还是特定场景最优解?

DeepSeek MoE架构采用跨节点专家并行&#xff08;EP&#xff09;架构&#xff0c;在提升推理系统性能方面展现出巨大潜力。这一架构在发展进程中也面临诸多挑战&#xff0c;其未来究竟是会成为行业的主流方向&#xff0c;还是仅适用于特定场景&#xff0c;成为特定领域的最优解…

win11编译llama_cpp_python cuda128 RTX30/40/50版本

Geforce 50xx系显卡最低支持cuda128&#xff0c;llama_cpp_python官方源只有cpu版本&#xff0c;没有cuda版本&#xff0c;所以自己基于0.3.5版本源码编译一个RTX 30xx/40xx/50xx版本。 1. 前置条件 1. 访问https://developer.download.nvidia.cn/compute/cuda/12.8.0/local_…

前端到AI,LangChain.Js(五)

学习地址&#xff1a; 学习小册 实战 基于前面的RAG模块&#xff0c;可以通过构建本地存储向量数据库&#xff0c;本地存储聊天记录&#xff0c;部署成stream API&#xff0c;做一个chat bot。 Agents模块&#xff0c;可以通过tools进行数据标签和信息提取&#xff0c;通过RU…

使用 Arduino 和 Wi-Fi 控制 RGB LED

通过 WiFi 的 Arduino RGb LED 控制器 &#xff0c;在本文中&#xff0c;我们将介绍下一个基于 IOT 的项目 - 使用 Wi-Fi 的 RGB LED 闪光灯。在这里&#xff0c;我们使用 Arduino 和 ESP8266 Wi-Fi 模块通过 Android 手机通过 Wi-Fi 控制 RGB LED 的颜色。 在这个 RGB Flash…

C# 开发工具Visual Studio下载和安装

开发环境与工具 C#的主要开发环境是Visual Studio&#xff0c;这是一个功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;集成了代码编辑、调试、项目管理、版本控制等功能。此外&#xff0c;Visual Studio Code也是一个轻量级的跨平台代码编辑器&#xff0c;支…

HTML + CSS 题目

1.说说你对盒子模型的理解? 一、是什么 对一个文档进行布局的时候&#xff0c;浏览器渲染引擎会根据标准之一的css基础盒模型&#xff0c;将所有元素表示为一个个矩形的盒子。 一个盒子由四个部分组成: content&#xff0c;padding&#xff0c;border&#xff0c;margin 下…

数据结构–栈

数据结构–栈 什么是栈&#xff1f; 首先先给大家讲一下栈是什么&#xff1a;栈是一种特殊的线性表。特殊之处就在于对栈的操作的特殊。对于栈&#xff0c;只允许其在固定的一端进行插入和删除元素操作。不像普通的顺序表&#xff0c;链表&#xff0c;可以在任意位置进行删除插…

通过Docker搭个游戏——疯狂大陆(Pkland)

最近在研究我的服务器&#xff0c;在服务器上搭了很多docker的项目&#xff0c;然后找着找着发现一个能用Docker配置环境的游戏叫Pkland。 项目地址&#xff1a;GitHub - popkarthb/pkland: 疯狂大陆是一款多人在线的战略游戏。 游戏操作简捷,您仅需要使用浏览器就可以在任何时…

03.06 QT

一、使用QSlider设计一个进度条&#xff0c;并让其通过线程自己动起来 程序代码&#xff1a; <1> Widget.h: #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QThread> #include "mythread.h"QT_BEGIN_NAMESPACE namespace Ui {…

【LeetCode 热题 100】3. 无重复字符的最长子串 | python 【中等】

美美超过管解 题目&#xff1a; 3. 无重复字符的最长子串 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。 注…

微服务拆分-拆分商品服务

复制hm-service模块pom.xml文件里面的依赖到item-service模块pom.xml文件。 需要准备的依赖 <dependencies><!--common--><dependency><groupId>com.heima</groupId><artifactId>hm-common</artifactId><version>1.0.0</v…

父进程和子进程

思维导图&#xff1a; 1.使用父子进程实现一个图片的拷贝 要求父进程拷贝前一部分 子进程拷贝后一部分 使用diff查看两个文件是否相同 #include <head.h> int main(int argc, const char *argv[]) {int fd1open("/home/ubuntu/3.6/xiaoxin.bmp",O_RDONLY);…

3.2、对称加密算法

目录 对称加密算法总结国产加密算法 - SM系列 对称加密算法总结 首先看一下第一个它的全称叫数据加密标准&#xff0c;英文单词是DES&#xff0c;它是一种分组加密算法&#xff0c;就是比如说&#xff0c;我有10t的数据&#xff0c;我先给你做一下分组&#xff0c;比如说就是64…

let、const和var的区别是什么?

文章目录 一、概述二、var 的特点2.1、作用域2.2、提升&#xff08;Hoisting&#xff09;2.3、全局变量2.4、重复声明‌ 三、let 的特点3.1、作用域3.2、提升&#xff08;Hoisting&#xff09;3.3、不允许重复声明 四、const 的特点4.1、作用域4.2、不可变性4.3、提升&#xff…

数一考研复习之拉格朗日中值定理在求解函数极限中的应用,

最近在复习考研数学,只是简单做题过于乏味,因此便总结了一些笔记,后续若有空,也会将自己的复习笔记分享出来。本篇&#xff0c;我们将重点讲解拉格朗日中值定理在求解函数极限中的应用。同时,作者本人作为python领域创作者&#xff0c;还将在本文分享使用sympy求解高数中函数极…