损失函数python实现

news2024/9/20 20:17:01

下面是用 Python 实现上述常见损失函数的代码示例。我们将使用 NumPy 库来进行数值计算。
首先,确保你已经安装了 NumPy:
pip install numpy

然后,我们可以编写实现这些损失函数的代码:
import numpy as np

def mean_squared_error(y_true, y_pred):
    """
    均方误差 (MSE)
    :param y_true: 真实值,形状为 (N,)
    :param y_pred: 预测值,形状为 (N,)
    :return: MSE
    """
    return np.mean((y_true - y_pred) ** 2)

def binary_cross_entropy(y_true, y_pred):
    """
    二分类交叉熵 (BCE)
    :param y_true: 真实标签,形状为 (N,)
    :param y_pred: 预测概率,形状为 (N,)
    :return: BCE
    """
    y_pred = np.clip(y_pred, 1e-15, 1 - 1e-15)  # 防止 log(0)
    return -np.mean(y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred))

def categorical_cross_entropy(y_true, y_pred):
    """
    多分类交叉熵 (CCE)
    :param y_true: 真实标签,形状为 (N, C),one-hot 编码
    :param y_pred: 预测概率,形状为 (N, C)
    :return: CCE
    """
    y_pred = np.clip(y_pred, 1e-15, 1 - 1e-15)  # 防止 log(0)
    return -np.mean(np.sum(y_true * np.log(y_pred), axis=1))

def mean_absolute_error(y_true, y_pred):
    """
    绝对误差 (MAE)
    :param y_true: 真实值,形状为 (N,)
    :param y_pred: 预测值,形状为 (N,)
    :return: MAE
    """
    return np.mean(np.abs(y_true - y_pred))

def hinge_loss(y_true, y_pred):
    """
    铰链损失 (Hinge Loss)
    :param y_true: 真实标签,形状为 (N,),值为 -1 或 1
    :param y_pred: 预测值,形状为 (N,)
    :return: Hinge Loss
    """
    return np.mean(np.maximum(0, 1 - y_true * y_pred))

def huber_loss(y_true, y_pred, delta=1.0):
    """
    Huber 损失
    :param y_true: 真实值,形状为 (N,)
    :param y_pred: 预测值,形状为 (N,)
    :param delta: 控制从二次损失到线性损失的过渡点
    :return: Huber Loss
    """
    error = y_true - y_pred
    is_small_error = np.abs(error) <= delta
    small_error_loss = 0.5 * error ** 2
    large_error_loss = delta * (np.abs(error) - 0.5 * delta)
    return np.mean(np.where(is_small_error, small_error_loss, large_error_loss))

def kl_divergence(p, q):
    """
    Kullback-Leibler 散度 (KL Divergence)
    :param p: 真实分布,形状为 (N,)
    :param q: 预测分布,形状为 (N,)
    :return: KL Divergence
    """
    p = np.clip(p, 1e-15, 1 - 1e-15)  # 防止 log(0)
    q = np.clip(q, 1e-15, 1 - 1e-15)  # 防止 log(0)
    return np.sum(p * np.log(p / q))

# 示例数据
y_true = np.array([1, 0, 1, 0])
y_pred = np.array([0.9, 0.1, 0.8, 0.2])
y_true_one_hot = np.array([[0, 1], [1, 0], [0, 1], [1, 0]])
y_pred_prob = np.array([[0.1, 0.9], [0.9, 0.1], [0.2, 0.8], [0.8, 0.2]])

# 计算损失
mse = mean_squared_error(y_true, y_pred)
bce = binary_cross_entropy(y_true, y_pred)
cce = categorical_cross_entropy(y_true_one_hot, y_pred_prob)
mae = mean_absolute_error(y_true, y_pred)
hinge = hinge_loss(2 * y_true - 1, y_pred)  # 将 y_true 转换为 -1 和 1
huber = huber_loss(y_true, y_pred)
kl = kl_divergence(y_true, y_pred)

print(f"MSE: {mse}")
print(f"BCE: {bce}")
print(f"CCE: {cce}")
print(f"MAE: {mae}")
print(f"Hinge Loss: {hinge}")
print(f"Huber Loss: {huber}")
print(f"KL Divergence: {kl}")

解释
1. 均方误差 (MSE):计算真实值和预测值之差的平方的平均值。
2. 二分类交叉熵 (BCE):计算真实标签和预测概率之间的交叉熵损失。
3. 多分类交叉熵 (CCE):计算真实标签(one-hot 编码)和预测概率之间的交叉熵损失。
4. 绝对误差 (MAE):计算真实值和预测值之差的绝对值的平均值。
5. 铰链损失 (Hinge Loss):用于支持向量机的分类任务,计算真实标签和预测值之间的铰链损失。
6. Huber 损失:结合了 MSE 和 MAE 的优点,对于小误差使用 MSE,对于大误差使用 MAE。
7. Kullback-Leibler 散度 (KL Divergence):计算两个概率分布之间的差异。
 

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

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

相关文章

visionpro脚本

visionproToolBlock的脚本的优先级优于工具连线的优先级&#xff0c;一般是照着脚本的执行顺序进行执行对应的工具&#xff0c;最常用的是C#的高级脚本&#xff0c;C#的脚本如下分为5部分。 第一部分&#xff1a;主要是一些库的引用&#xff0c;对于有些类型不知道库的时候&…

14_Python面向对象

面向过程与面向对象 在编程范式&#xff08;programming paradigms&#xff09;中&#xff0c;面向过程&#xff08;Procedural Programming&#xff09;和面向对象&#xff08;Object-Oriented Programming&#xff0c;简称OOP&#xff09;是两种主要的编程风格。 Python是一…

【医学半监督】置信度指导遮蔽学习的半监督医学图像分割

摘要: 半监督学习(Semi-supervised learning)旨在利用少数标记数据和多数未标记数据训练出高性能模型。现有方法大多采用预测任务机制,在一致性或伪标签的约束下获得精确的分割图,但该机制通常无法克服确认偏差。针对这一问题,本文提出了一种用于半监督医学图像分割的新…

(十六)Ubuntu 20.04 下搭建PX4+MATLAB 仿真环境(HITL)

在文章&#xff08;十五&#xff09;Ubuntu 20.04 下搭建PX4MATLAB 仿真环境我们学习了如何配置仿真环境&#xff0c;在本节&#xff0c;主要进行HITL的仿真环境搭建。 根据&#xff08;十五&#xff09;Ubuntu 20.04 下搭建PX4MATLAB 仿真环境完成配置到如下界面&#xff1a;…

志邦家居CIO吴俊涛谈转型:天润融通如何赋能家居行业未来

根据国家统计局、住建部等各部门综合数据显示&#xff0c;2024年国内泛家居全渠道销售额在预计将超过4.7万亿元&#xff0c;并且在存量房需求释放与智能家居品类创新的推动下&#xff0c;预计2027年将突破5.3万亿元&#xff0c;展现出强劲的增长弹性。 然而&#xff0c;家居行…

【matlab】将程序打包为exe文件(matlab r2023a为例)

文章目录 一、安装运行时环境1.1 安装1.2 简介 二、打包三、打包文件为什么很大 一、安装运行时环境 使用 Application Compiler 来将程序打包为exe&#xff0c;相当于你使用C编译器把C语言编译成可执行程序。 在matlab菜单栏–App下面可以看到Application Compiler。 或者在…

mybatisplus逻辑删除

逻辑删除配置 mybatis-plus:global-config:db-config:logic-delete-field: deletedlogic-not-delete-value:0logic-delete-value:1 查询语句也会自动加上where isdeleted0

FedOV

3 FEDOV: ONE-SHOT FEDERATED OPEN-SET VOTING FRAMEWORK 3.1 PROBLEM STATEMENT 假设有个客户端及其本地数据集。我们的目标是在服务器的帮助下&#xff0c;在不交换原始数据的情况下&#xff0c;训练一个优秀的机器学习模型 。此外&#xff0c;每个客户端只允许与服务器进行…

Linux 删除文件不释放空间问题处理

背景&#xff1a; 服务器磁盘空间已经达到100%&#xff0c;删除存放日志路径下的文件后&#xff0c;发现空间并未释放&#xff01; 原因&#xff1a;在linux系统中&#xff0c;通过rm删除文件将会从文件系统的文件夹结构上解除链接(unlink)然后删除&#xff0c;然而假设文件是被…

基于存内计算架构的模型部署与映射优化

先进计算大赛背景&#xff1a; ‘’存内计算”架构通过消除存储与计算单元间的物理距离&#xff0c;突破传统冯诺依曼架构的限制&#xff0c;自2016年起受到广泛关注&#xff0c;被视为国产算力发展的关键技术。 ​ 在存内计算架构中&#xff0c;权重布局对提高存算单元利用率…

VBA技术资料MF198:禁用下拉拖放

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

c++ day01

格式化输入 #include <iostream> #include<iomanip> using namespace std;int main() {double num1090.123456;cout<<"num"<<num<<endl;cout<<oct<<"num"<<num<<endl;cout<<hex<<&qu…

【C#】内存的使用和释放

在 C# 中&#xff0c;内存管理主要是由 .NET 的垃圾回收器&#xff08;Garbage Collector, GC&#xff09;自动处理的。然而&#xff0c;了解如何正确地使用和释放内存对于编写高效且可靠的代码非常重要。以下是一些关键点和最佳实践&#xff1a; 1. 内存分配 托管资源&#x…

如何查询论文的SCI检索号?

一、登录Web of Science 不要自己登录&#xff0c;需要选择机构为CHINA CERNET Federation&#xff0c;否则无法查询文章。 然后转到机构&#xff0c;选择对应的大学。 更具对应文章名查询文献。 二、查询文献名

python基础知识(六)--字典遍历、公共运算符、公共方法、函数、变量分类、参数分类、拆包、引用

字典遍历方法 函数名含义keys()以列表的形式&#xff0c;返回一个字典所有的键。values()以列表的形式&#xff0c;返回一个字典所有的值。items()返回由键值组成的序列&#xff0c;主要应用于遍历字典。 公共运算符 运算符描述支持的容器类型合并字符串、列表、元组*复制字符…

linux入门到实操-9 linux文件操作命令:创建文件、复制文件或文件夹、删除和移动文件、多种查看文件的方法

教程来源&#xff1a;B站视频BV1WY4y1H7d3 3天搞定Linux&#xff0c;1天搞定Shell&#xff0c;清华学神带你通关_哔哩哔哩_bilibili 整理汇总的课程内容笔记和课程资料&#xff08;包含课程同版本linux系统文件等内容&#xff09;&#xff0c;供大家学习交流下载&#xff1a;…

PHP限定post提交数据的次数

PHP限定post提交数据的次数。 在PHP中&#xff0c;你可以通过记录IP地址的提交次数并在会话或数据库中存储这些信息来实现这个需求。以下是一个简单的PHP示例&#xff0c;它使用会话来跟踪IP地址的提交次数。 <?php session_start(); // 获取用户的IP地址 $ip_address $…

迁移学习+多模态融合,小白轻松发一区!创新性拉满!

多模态研究如今愈发火热&#xff0c;已成为各大顶级会议的投稿热门。今天&#xff0c;我为大家提供一个多模态的创新思路&#xff1a;迁移学习与多模态融合。 迁移学习多模态融合方向的优势 1.提升模型性能&#xff1a;综合更多维度优势&#xff0c;跨模态互补 2.快速适应新…

计算机网络 --- 初识协议

序言 上一篇文章中 &#xff08;&#x1f449;点击查看&#xff09;&#xff0c;我们简单的了解了怎么寻找目标计算机&#xff0c;需要通过交换机&#xff0c;路由器等设备跨越多个网络来不断的转发我们需要传输的数据&#xff0c;直至到达目标计算机。  那我们设备之间数据是…

挖矿病毒排查演示

1、上传病毒文件到/opt目录中 2、把压缩文件名修改成virus.zip 3、检查一下/etc/passwd ​ root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:…