损失函数-二分类和多分类

二分类和多分类的损失函数

二分类

  • 损失函数
    L ( y , y ^ ) = − ( y l o g ( y ^ ) ) + ( 1 − y ) l o g ( 1 − y ^ ) L(y,\hat{y}) = -(ylog(\hat{y})) + (1-y)log(1-\hat{y}) L(y,y^)=(ylog(y^))+(1y)log(1y^)
    其中真实标签表示为y(取值为 0 或 1),预测概率表示为 y ^ \hat{y} y^(取值在 0 到 1 之间)

  • 代码

import torch
import torch.nn as nncriterion = nn.BCELoss()  # 或者使用 nn.BCEWithLogitsLoss()  BCEWithLogitsLoss可以直接接收logit输出
# 假设模型的输出 logits
logits = torch.tensor([0.2, 0.8, 0.5, 0.1]) #shape: (4, 1) 
predicted_probabilities = torch.sigmoid(logits) #shape: (4, 1) 
# 真实标签
labels = torch.tensor([0.0, 1.0, 1.0, 0.0]) #shape: (4, 1) 
# 计算损失
loss = criterion(predicted_probabilities, labels)
print("Loss:", loss.item())
  • 可视化损失值
    对于输出的loss值,我们往往不能理解这个loss是好还是坏,我们重看损失函数,发现对于单个正样本来说:
    l o s s = − l o g ( y ^ ) loss = -log(\hat{y}) loss=log(y^)
    对于单个负样本来说:
    l o s s = − l o g ( 1 − y ^ ) loss = -log(1-\hat{y}) loss=log(1y^)
    从这个公式我们可以反推模型对正样本预测的概率为:
    h i t p o s = e − l o s s hit_{pos} = e^{-loss} hitpos=eloss
    对负样本预测的概率为:
    h i t n e g = 1 − e − l o s s hit_{neg} = 1-e^{-loss} hitneg=1eloss
    这个hit就比较形象了,$hit_{pos}$越接近1,说明正样本的预测效果效果越好,$hit_{neg}$越接近0,说明负样本的预测效果效果越好

多分类

  • 损失函数
    L ( y , y ^ ) = − ∑ c = 1 C y l o g ( y ^ ) L(y,\hat{y}) = -\sum_{c=1}^Cylog(\hat{y}) L(y,y^)=c=1Cylog(y^)
    其中真实标签表示为y(取值为 0 或 1,表示是否属于第c类),预测概率表示为$\hat{y}$ (取值在 0 到 1 之间)
  • 代码
import torch
import torch.nn as nncriterion = nn.CrossEntropyLoss()# 假设模型的输出 logits(未经过 sigmoid)
logits = torch.tensor([[1.0, 2.0],  # 类别 0 和 1 的 logits[0.0, 1.0],[0.5, 0.5],[0.0, 0.0]]) # shape:(4,2)# 真实标签,格式为类别索引
# 0 表示第一个类别,1 表示第二个类别
labels = torch.tensor([1, 1, 0, 0])  # shape:(1,4)# 计算损失
loss = criterion(logits, labels)print("Loss:", loss.item())
  • 可视化损失值
    对于输出的loss值,我们往往不能理解这个loss是好还是坏,我们重看损失函数,发现对于单个样本来说:
    l o s s = − l o g ( y ^ ) loss = -log(\hat{y}) loss=log(y^)
    从这个公式我们可以反推模型对当前样本的正确类别预测的概率为:
    h i t = e − l o s s hit = e^{-loss} hit=eloss
    这个hit就比较形象了,hit越接近1,说明效果越好

二分类和多分类区别

  • 从损失函数的物理含义上来看,二分类的损失函数不仅希望正样本输出概率接近1,并且希望负样本的输出概率接近0;而多分类的损失函数仅仅希望正样本输出概率接近1,对于负样本其实没有约束
  • 对于二分类问题:如果你希望模型不仅能找出正样本,而且筛掉副样本,就用二分类损失。如果你仅仅希望找出正样本而不管负样本,多分类的损失也能用。

多分类问题中评价问题

TP(True Positive):真实标签为正类,模型预测为正类的样本数量。
TN(True Negative):真实标签为负类,模型预测为负类的样本数量。
FP(False Positive):真实标签为负类,但模型预测为正类的样本数量。
FN(False Negative):真实标签为正类,但模型预测为负类的样本数量。

  • 准确率acc
    关心模型预测的能力
    a c c = T P + T N T P + F P + F N + T N acc = \frac{TP+TN}{TP+FP+FN+TN} acc=TP+FP+FN+TNTP+TN

  • 精准率pre
    关心模型预测负样本能力
    p r e = T P T P + F P pre = \frac{TP}{TP+FP} pre=TP+FPTP

  • 召回率Recall
    关心模型预测正样本的能力
    r e c a l l = T P T P + F N recall = \frac{TP}{TP+FN} recall=TP+FNTP

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

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

相关文章

【模电刷题复习--填空】

如有错误,欢迎各位大佬在评论区批评指正 模电刷题 一、填空题1.本征半导体中,若掺入微量的__五__价元素,则形成___n___型半导体,其多数载流子是自由电子,若掺入微量的__三__价元素,则形成__p__型半导体。其…

Android使用JAVA调用JNI原生C++方法

1.native-lib.cpp为要生成so库的源码文件 2.JNI函数声明说明 NewStringUTF函数会返回jstring JNI函数声明规则 3.JAVA中声明及调用JNI函数 声明: 调用

DAY178内网渗透之内网对抗:横向移动篇入口差异切换上线IPC管道ATSC任务Impacket套件UI插件

1.内网横向移动 1、横向移动篇-入口点分析-域内域外打点 2、横向移动篇-IPC利用-连接通讯&计划任务, 3、横向移动篇-IPC利用-命令模式&工具套件 1.1 横向移动入口知识点 收集到域内用户和凭据后,为后续利用各种协议密码喷射通讯上线提供条件,…

宠物行业的出路:在爱与陪伴中寻找增长新机遇

在当下的消费市场中,如果说有什么领域能够逆势而上,宠物行业无疑是一个亮点。当人们越来越注重生活品质和精神寄托时,宠物成为了许多人的重要伴侣。它们不仅仅是家庭的一员,更是情感的寄托和生活的调剂。然而,随着行业…

MySQL数据库——索引结构之B+树

本文先介绍数据结构中树的演化过程,之后介绍为什么MySQL数据库选择了B树作为索引结构。 文章目录 树的演化为什么其他树结构不行?为什么不使用二叉查找树(BST)?为什么不使用平衡二叉树(AVL树)&a…

大模型—Ollama 结构化输出

Ollama 结构化输出 Ollama现在支持结构化输出,使得可以按照由JSON模式定义的特定格式来约束模型的输出。Ollama的Python和JavaScript库已经更新,以支持结构化输出。 结构化输出的用例包括: 从文档中解析数据从图像中提取数据结构化所有语言模型响应比JSON模式更可靠和一致开…

欧拉计划 Project Euler 35 题解

欧拉计划 Problem 35 题解 题干思路code暴力筛法rotate函数使用语法示例代码 题干 思路 一个很自然的思路就是暴力找&#xff0c;遍历一百万之内的所有数&#xff0c;也可以先把一百万以内所有的素数筛出来然后从中取选。这里我使用的是暴力算法。 code 暴力 #include <…

JVM常见排查问题的命令及可视化工具

前置&#xff1a; RMI协议&#xff1a;java的一个远程调用协议&#xff0c;在不同的JVM之间可以进行接口的调用&#xff0c;但数据不安全&#xff0c;且仅限java&#xff1b; 一、常见命令及用法 1、jps&#xff1a;与Linux的ps命令有点类似&#xff0c;查看系统中在运行的J…

pytorch基础之注解的使用--003

Title 1.学习目标2.定义3.使用步骤4.结果 1.学习目标 针对源码中出现一些注解的问题&#xff0c;这里专门写一篇文章进行讲解。包括如何自定义注解&#xff0c;以及注意事项&#xff0c;相信JAVA中很多朋友业写过&#xff0c;但是今天写的是Python哦。。。 2.定义 在 Python…

C#编写的金鱼趣味小应用 - 开源研究系列文章

今天逛网&#xff0c;在GitHub中文网上发现一个源码&#xff0c;里面有这个金鱼小应用&#xff0c;于是就下载下来&#xff0c;根据自己的C#架构模板进行了更改&#xff0c;最终形成了这个例子。 1、 项目目录&#xff1b; 2、 源码介绍&#xff1b; 1) 初始化&#xff1b; 将样…

高效搭建Nacos:实现微服务的服务注册与配置中心

一、关于Nacos 1.1 简介 Nacos&#xff08;Dynamic Naming and Configuration Service&#xff09;是阿里巴巴开源的一款动态服务发现、配置管理和服务管理平台。它旨在帮助开发者更轻松地构建、部署和管理分布式系统&#xff0c;特别是在微服务架构中。Nacos 提供了简单易用…

112、Qt MSVC编译Qtxlsx

先参考103、QT搭建Excel表环境-使用Qtxlsx库文档&#xff0c;下载xlsx源码以及安装perl环境 并配置VS2019和perl环境变量 Qtxlsx库源码下载&#xff1a;https://github.com/dbzhang800/QtXlsxWriter 解压至非中文路径下 打开Qt自带的MSVC 2019命令框进入文件夹并运行命令生成…

频域滤波为什么使用psf2otf函数?

MATLAB中circshift函数是psf2otf函数的核心&#xff0c;在MATLAB中circshift函数的原理分析——psf2otf函数的核心直观解释了为什么需要循环移位。 MATLAB提出了psf2otf函数&#xff0c;先做循环移位&#xff0c;再计算离散傅里叶变换。如果有空域的卷积核&#xff0c;通过这个…

使用pyproject.toml文件管理 HuggingFace Transformers 项目配置

使用 pyproject.toml 文件管理 HuggingFace Transformers 项目配置——详细解析与实践 Source&#xff1a;https://github.com/huggingface/transformers 一、前言 在开发与维护大型 Python 项目时&#xff0c;统一的项目配置和工具管理变得尤为重要。HuggingFace 的 Transf…

PySide6 SQLite3 做的 电脑组装报价系统

一、数据库结构说明 1. 配件类别表 (component_categories) 字段名类型说明约束category_idINTEGER类别IDPRIMARY KEY, AUTOINCREMENTcategory_nameTEXT类别名称NOT NULL, UNIQUEdescriptionTEXT类别描述 2. 配件表 (components) 字段名类型说明约束component_idINTEGER配件…

Android 部分操作(待补充

新建的线性布局.xml文件&#xff0c;文件名是 linearlayout.xml&#xff0c;根元素设置LinearLayout&#xff1b; 对于线性布局&#xff0c;调整第一个元素相对于顶部的位置&#xff0c;通过属性 layout_marginTop 设置后调整第一个元素的位置&#xff0c;后边的元素会依次向…

Android笔试面试题AI答之Android基础(7)

Android入门请看《Android应用开发项目式教程》&#xff0c;视频、源码、答疑&#xff0c;手把手教 文章目录 1.Android开发如何提高App的兼容性&#xff1f;**1. 支持多版本 Android 系统****2. 适配不同屏幕尺寸和分辨率****3. 处理不同硬件配置****4. 适配不同语言和地区**…

CSS学习记录21

CSS 工具提示 通过CSS 创建工具提示&#xff08;Tooltip)。 当用户将鼠标指针移动到元素上时&#xff0c;工具提示通常用于提供关于某内容的额外信息&#xff1a; <style> /* Tooltip 容器 */ .tooltip {position: relative;display: inline-block;border-bottom: 1px …

2025经典的软件测试面试题(答案+文档)

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 以下是软件测试相关的面试题及答案&#xff0c;希望对各位能有帮助&#xff01; 1、测试分为哪几个阶段? 一般来说分为5个阶段&#xff1a;单元测试、集成测试…

021-spring-springmvc

比较重要的部分 比较重要的部分 比较重要的部分 关于组件的部分 这里以 RequestMappingHandlerMapping 为例子 默认的3个组件是&#xff1a; org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping org.springframework.web.servlet.mvc.method.annotation.Requ…