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

逻辑回归以及损失函数

什么是逻辑回归?

逻辑回归是一种用于二分类(多分类)问题的概率线性模型,常用于预测某样本属于某一类别的概率。

逻辑回归的基本思想

逻辑回归试图通过一个线性函数预测自变量x与因变量y的关系,再通过sigmoid函数将线性结果z映射为概率分布。

模型表示:

z=w^Tx+b

逻辑函数(sigmoid):

\sigma (z)=\frac{1}{1+e^{-z}}

输出概率:

P(y=1|x)=\sigma (z) = \frac{1}{1+e^{-(w^Tx+b)}}

P(y=0|x)=1-P(y=1|x)


损失函数

二分类

逻辑回归的目标是让预测概率尽可能贴近真实标签。
采用对数损失函数,即交叉熵损失:

L=-[ylog(\hat{y})+(1-y)log(1-\hat{y})]

  • y 为真实标签(0或1)
  • \hat{y}=P(y=1|x)是预测概率

对N个样本的平均损失:

Loss = -\frac{1}{N}\sum_{i=1}^{N}[y^{(i)}log(\hat{y}^{(i)})+(1-y^{(i)})log(1-\hat{y}^{(i)})]

多分类

多分类问题中,假设有 C 个类别,每个样本的标签y是一个整数(0~C-1),\hat{y}是长度为C的概率分布(softmax输出):

Loss = -\frac{1}{N}\sum_{i=1}^{N}log(p_{i,y_i})

p_{i,y_i}:是第i个样本对其真实类别y_i的预测概率。


逻辑回归损失函数代码实现

二分类

import numpy as npdef sigmoid(z):return 1/(1+np.exp(-z))def cross_entropy_loss(pred, gt):''':param pred: shape(N,),预测为某类的概率:param gt: shape(N,),真实标签,0 or 1'''eps = 1e-15pred = np.clip(pred, eps, 1-eps)  # 将pred限制在[eps,1-eps]中,超过区间上界的值会被设为上界,低于下界的值会被设为下界loss = -np.mean(gt*np.log(pred)+(1-gt)*np.log(1-pred))return lossgt = np.array([1,0,1,0])
pred_logits = np.array([2,-1,0,-2])
pred = sigmoid(pred_logits)
loss = cross_entropy_loss(pred, gt)
print(loss)

多分类

import numpy as npdef sigmoid(z):return 1 / (1+np.exp(-z))def cross_entropy_loss(pred,gt):''':param pred: [BS,classes]  每行是各类概率(softmax的输出):param gt: [BS,]  每个元素是类别编号:return:'''eps = 1e-15pred = np.clip(pred, eps, 1-eps)N = pred.shape[0]  # [N*classes]correct_class_probs = pred[np.arange(N),gt]loss = -np.mean(np.log(correct_class_probs))return lossdef softmax(z):z = z-np.max(z)exp_z = np.exp(z)return exp_z/np.sum(exp_z)gt = np.array([2,0,1,2]) # 4个样本,3分类
pred_logits = np.array([[1.2,0.2,2.1],[2.0,1.1,4.0],[0.5,1.5,1.8],[1.1,0.3,2.5]])
pred_probs = softmax(pred_logits)
loss = cross_entropy_loss(pred_probs,gt)
print(loss)

http://www.dtcms.com/a/355938.html

相关文章:

  • 数字孪生(Digital Twin):未来产业与城市的智慧引擎
  • AI Agent从0到1:剖析Block与GSK的两种产品化落地路径
  • 容器学习04-kubernetes(k8s)
  • 海康相机开发---设备登录
  • (二分查找)Leetcode34. 在排序数组中查找元素的第一个和最后一个位置+74. 搜索二维矩阵
  • 【LInux】常用命令笔记
  • Linux之Shell编程(一)
  • 异步方法和多线程有什么区别,他们的实现逻辑是什么以及为什么异步方法: 不能和调用者在同一个类中
  • VisionPro联合编程控件导入WinFrom以及VS卡死问题
  • GCC版本和C语言标准版本的对应关系
  • 一个Demo射击小计(纯蓝图)
  • 前端学习 10-1 :验证中的UVM
  • .Net Core Web 架构(管道机制)的底层实现
  • jadx反向编译JAR包
  • 基于SQL数据库的智能问答系统设计与实现
  • Codeforces Round 1043 (Div. 3) D. From 1 to Infinity
  • 2025年9月计算机二级C++语言程序设计——选择题打卡Day9
  • 【数据分享】珠江三角洲水系地理空间全套数据集
  • x64dbg的基本调试操作 (未完,待补充)
  • 通信协议再升级,PROFINET和EtherNet IP网关迎接改造升级大挑战
  • 智慧清洁革新者:有鹿机器人自述
  • @Jenkins 介绍、部署与使用标准作业程序
  • 深入 OpenHarmony 内核:设备待机管理模块的休眠调度与资源节能技术
  • AT_abc407_f [ABC407F] Sums of Sliding Window Maximum
  • 告别低效!三坐标测量机提高油缸导向套检测效率
  • 拷贝构造和赋值重载有什么区别
  • 转发、重定向
  • 什么是强化学习? ——— 帮助新手了解
  • 基于51单片机的远程wifi浇花系统设计
  • Snagit 2025.3.0 截图贴图录像编辑