当前位置: 首页 > news >正文

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

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

二分类

  • 损失函数
    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

相关文章:

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

二分类和多分类的损失函数 二分类 损失函数 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^​))(1−y)log(1−y^​) 其中真实标签表示为y(取值为 0 或 1&#…...

汽车损坏识别检测数据集,使用yolo,pasical voc xml,coco json格式标注,6696张图片,可识别11种损坏类型,识别率89.7%

汽车损坏识别检测数据集,使用yolo,pasical voc xml,coco json格式标注,6696张图片,可识别11种损坏类型损坏: 前挡风玻璃(damage-front-windscreen ) 损坏的门 (damaged-d…...

从 Elastic 迁移到 Easysearch 指引

从 Elasticsearch 迁移到 Easysearch 需要考虑多个方面,这取决于当前使用的 Elasticsearch 版本、能容忍的停机时间、应用需求等。在此背景下,我们梳理了一下通用的升级指引,方便大家进行迁移工作。 迁移路径 Elasticsearch 版本快照兼容推…...

Yapi RCE 复现和批量编写

一、漏洞复现 首先祭出fofa,搜索语句为 app"yapi",但是为了避开国内,所以使用 app"yapi" && country"SG",SG为新加坡,结果如图 虽然有30页,但是能利用的可能也没几…...

【2024年-9月-21日-开源社区openEuler实践记录】PilotGo:简化运维管理的开源利器

开篇介绍 大家好,我是 fzr123。在运维领域摸爬滚打许久,我发现了PilotGo这个超实用的开源项目,它正悄然改变着运维人员处理日常任务的方式,为复杂的运维管理工作带来了极大的便利与效率提升。 技术亮点 1. 自动化运维任务编排 …...

ubuntu 20.04 国内源安装docker

先更新软件包,安装备要apt软件 # 更新软件包索引 sudo apt-get update# 安装需要的软件包以使apt能够通过HTTPS使用仓库 sudo apt-get install ca-certificates curl gnupg lsb-release使用阿里云源 # 添加阿里云官方GPG密钥 curl -fsSL http://mirrors.aliyun.co…...

比亚迪30亿教育慈善基金正式启动,助推中国科教进步

12月30日,比亚迪在深圳总部举行了30亿教育慈善基金启动仪式,比亚迪股份有限公司董事长兼总裁王传福与来自全国的35所高校代表及28所科技馆、博物馆代表共同启动比亚迪30亿教育慈善基金捐赠,推动中国科教进步。 捐资30亿教育慈善基金&#xf…...

【链表】重排链表,看似复杂实则并不简单~

文章目录 143. 重排链表解题思路 143. 重排链表 143. 重排链表 ​ 给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → … → Ln - 1 → Ln​ 请将其重新排列后变为: L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …​ 不能…...

yakit-靶场-高级前端加解密与验签实战(for嵌套纯享版)

高级前端加解密与验签实战 一、前端验证签名(验签)表单:HMAC-SHA256 使用hmac-sha256的十六进制key值可以加密 与页面加密后的值相同 热加载: encryptData func(p) { //sha256key值key codec.DecodeHex("313233343132333…...

洛谷 P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布

题解&#xff1a; #include<iostream> #include<vector> //定义二维数组&#xff0c;直接标识不同出法相应对应关系 int mark[5][5]{{0,-1,1,1,-1},{1,0,-1,1,-1},{-1,1,0,-1,1},{-1,-1,1,0,1},{1,1,-1,-1,0}}; void JudgeScore(int A,int B,int& countA,int&…...

NLP论文速读(NeurIPS 2024)|BERT作为生成式上下文学习者BERTs are Generative In-Context Learners

论文速读|BERTs are Generative In-Context Learners 论文信息&#xff1a; 简介&#xff1a; 本文探讨了在自然语言处理&#xff08;NLP&#xff09;领域中&#xff0c;上下文学习&#xff08;in-context learning&#xff09;的能力&#xff0c;这通常与因果语言模型&#x…...

亚马逊云科技 | Amazon Nova:智能技术新势力

在2024年亚马逊云科技re:invent大会上&#xff0c;Amazon Nova 系列自研生成式 AI 多模态模型重磅登场&#xff0c;新一代的AI产品-Amazon Nova&#xff0c;隶属于 Amazon Bedrock&#xff0c;一共发布6款大模型&#xff0c;精准切入不同领域&#xff0c;解锁多元业务可能&…...

Kali 自动化换源脚本编写与使用

1. 背景与需求 在使用 Kali Linux 的过程中&#xff0c;软件源的配置对系统的更新与软件安装速度至关重要。 Kali 的默认官方源提供了安全且最新的软件包&#xff0c;但有时由于网络条件或地理位置的限制&#xff0c;使用官方源可能会出现速度较慢的问题。 为了解决这一问题&a…...

【已解决】PDF文档有密码怎么办(2024新)免费在线工具PDF2Go

强大的解密工具PDF2Go使用指南 一、PDF2Go简介 PDF2Go是由德国QaamGo公司开发的在线PDF工具箱&#xff0c;以其强大的功能和用户友好的界面而闻名。它不仅免费&#xff0c;而且不需要用户注册或安装任何软件&#xff0c;只需打开浏览器即可使用。 二、功能特点 1. 免费且无需…...

华为ensp-BGP联盟

学习新思想&#xff0c;争做新青年&#xff0c;今天学习BGP联盟 实验介绍 一个BGP联盟是一个具有内部层次结构的AS。一个BGP联盟由若干个子AS 组成&#xff0c;子AS也称为成员AS。对于一个BGP联盟&#xff0c;其成员AS内部的各路由器之间需要建立全互联的IBGP邻居关系或使用B…...

ArcGIS中怎么进行水文分析?(思路介绍)

最近有人咨询&#xff0c;ArcGIS中怎么进行水文分析&#xff0c;大致的说一下河网提取的思路哈 解决思路&#xff1a;dem填洼→计算水流方向→计算水流累积矩阵→形成河网 dem填洼 计算水流方向 计算水流累积矩阵 用栅格计算器&#xff0c;设阈值&#xff08;自己多次尝试&…...

LabVIEW中实现多个Subpanel独立调用同一个VI

在LabVIEW中&#xff0c;如果需要通过多个Subpanel同时调用同一个VI并让这些VI实例独立运行&#xff0c;可以通过以下方法实现&#xff1a; 1. 问题背景 LabVIEW默认的VI是以单实例方式运行的。当将同一个VI加载到多个Subpanel时&#xff0c;会因为共享同一内存空间而导致冲突…...

【SpringMVC】Bean 加载控制

在实际开发中&#xff0c;SpringMVC 负责扫描和加载 Controller 层的 Bean 对象&#xff0c;而业务层和数据层等其他模块的 Bean 则由 Spring 框架负责扫描和加载。那么&#xff0c;如何控制 Spring 仅加载除了 Controller 层之外的其他 Bean 呢&#xff1f;为了解决这个问题&a…...

Socket编程中关于服务器端监听端口与新连接端口的深入剖析

Socket编程中关于服务器端监听端口与新连接端口的深入剖析 在Socket编程领域&#xff0c;存在一个容易让初学者感到困惑的问题。尽管很多人在网络上进行了相关探讨&#xff0c;但不少解释要么不够清晰明了&#xff0c;要么太过肤浅&#xff0c;未能深入到问题的核心&#xff0…...

如何通过HTTP API更新Doc

本文介绍如何通过HTTP API更新Collection中已存在的Doc。 说明 若更新Doc时指定id不存在&#xff0c;则本次更新Doc操作无效 如只更新部分属性fields&#xff0c;其他未更新属性fields默认被置为null 前提条件 已创建Cluster&#xff1a;创建Cluster。 已获得API-KEY&#…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...