用deepseek学大模型05逻辑回归

deepseek.com:逻辑回归的目标函数,损失函数,梯度下降 标量和矩阵形式的数学推导,pytorch真实能跑的代码案例以及模型,数据,预测结果的可视化展示, 模型应用场景和优缺点,及如何改进解决及改进方法数据推导。

逻辑回归全面解析

一、数学推导

模型定义
逻辑回归模型为概率预测模型,输出 P ( y = 1 ∣ x ) = σ ( w ⊤ x + b ) P(y=1 \mid \mathbf{x}) = \sigma(\mathbf{w}^\top \mathbf{x} + b) P(y=1x)=σ(wx+b),其中 σ ( z ) = 1 1 + e − z \sigma(z) = \frac{1}{1+e^{-z}} σ(z)=1+ez1


1. 目标函数与损失函数

  • 损失函数(交叉熵)
    单个样本的损失:
    L ( y , y ^ ) = − y log ⁡ ( y ^ ) − ( 1 − y ) log ⁡ ( 1 − y ^ ) \mathcal{L}(y, \hat{y}) = -y \log(\hat{y}) - (1-y) \log(1-\hat{y}) L(y,y^)=ylog(y^)(1y)log(1y^)
    其中 y ^ = σ ( w ⊤ x + b ) \hat{y} = \sigma(\mathbf{w}^\top \mathbf{x} + b) y^=σ(wx+b)

    所有样本的平均损失(标量形式):
    J ( w , b ) = − 1 N ∑ i = 1 N [ y i log ⁡ ( y ^ i ) + ( 1 − y i ) log ⁡ ( 1 − y ^ i ) ] J(\mathbf{w}, b) = -\frac{1}{N} \sum_{i=1}^N \left[ y_i \log(\hat{y}_i) + (1-y_i) \log(1-\hat{y}_i) \right] J(w,b)=N1i=1N[yilog(y^i)+(1yi)log(1y^i)]

    矩阵形式( X \mathbf{X} X为设计矩阵, y \mathbf{y} y为标签向量):
    J ( w , b ) = − 1 N [ y ⊤ log ⁡ ( σ ( X w + b ) ) + ( 1 − y ) ⊤ log ⁡ ( 1 − σ ( X w + b ) ) ] J(\mathbf{w}, b) = -\frac{1}{N} \left[ \mathbf{y}^\top \log(\sigma(\mathbf{X}\mathbf{w} + b)) + (1-\mathbf{y})^\top \log(1-\sigma(\mathbf{X}\mathbf{w} + b)) \right] J(w,b)=N1[ylog(σ(Xw+b))+(1y)log(1σ(Xw+b))]


2. 梯度下降推导

  • 标量形式梯度
    w j w_j wj求偏导:
    ∂ L ∂ w j = ( y ^ − y ) x j \frac{\partial \mathcal{L}}{\partial w_j} = (\hat{y} - y) x_j wjL=(y^y)xj
    b b b求偏导:
    ∂ L ∂ b = y ^ − y \frac{\partial \mathcal{L}}{\partial b} = \hat{y} - y bL=y^y

  • 矩阵形式梯度
    梯度矩阵为:
    ∇ w J = 1 N X ⊤ ( σ ( X w + b ) − y ) \nabla_{\mathbf{w}} J = \frac{1}{N} \mathbf{X}^\top (\sigma(\mathbf{X}\mathbf{w} + b) - \mathbf{y}) wJ=N1X(σ(Xw+b)y)
    ∂ J ∂ b = 1 N ∑ i = 1 N ( y ^ i − y i ) \frac{\partial J}{\partial b} = \frac{1}{N} \sum_{i=1}^N (\hat{y}_i - y_i) bJ=N1i=1N(y^iyi)


损失函数的设计是机器学习模型的核心环节,它决定了模型如何衡量预测值与真实值的差异,并指导参数优化方向。逻辑回归的损失函数(交叉熵)设计并非偶然,而是基于概率建模、数学优化和信息论的深刻原理。以下从多个角度详细解释其设计逻辑:


一、损失函数的设计逻辑

1. 概率建模的视角

逻辑回归的目标是预测样本属于某一类的概率(二分类)。

  • 假设数据服从伯努利分布
    对单个样本,标签 y ∈ { 0 , 1 } y \in \{0,1\} y{0,1},模型预测的概率为:
    { P ( y = 1 ∣ x ) = y ^ = σ ( w ⊤ x + b ) , P ( y = 0 ∣ x ) = 1 − y ^ . \begin{cases} P(y=1 \mid \mathbf{x}) = \hat{y} = \sigma(\mathbf{w}^\top \mathbf{x} + b), \\ P(y=0 \mid \mathbf{x}) = 1 - \hat{y}. \end{cases} {P(y=1x)=y^=σ(wx+b),P(y=0x)=1y^.
    样本的联合似然函数为:
    L ( w , b ) = ∏ i = 1 N y ^ i y i ( 1 − y ^ i ) 1 − y i . L(\mathbf{w}, b) = \prod_{i=1}^N \hat{y}_i^{y_i} (1 - \hat{y}_i)^{1 - y_i}. L(w,b)=i=1Ny^iyi(1y^i)1yi.

  • 最大化对数似然
    为了便于优化,对似然函数取负对数(将乘法转为加法,凸函数性质不变):
    − log ⁡ L ( w , b ) = − ∑ i = 1 N [ y i log ⁡ y ^ i + ( 1 − y i ) log ⁡ ( 1 − y ^ i ) ] . -\log L(\mathbf{w}, b) = -\sum_{i=1}^N \left[ y_i \log \hat{y}_i + (1 - y_i) \log (1 - \hat{y}_i) \right]. logL(w,b)=i=1N[yilogy^i+(1yi)log(1y^i)].
    最小化该式等价于最大化似然函数,此即 交叉熵损失

2. 信息论视角

交叉熵(Cross-Entropy)衡量两个概率分布 P P P(真实分布)和 Q Q Q(预测分布)的差异:
H ( P , Q ) = − E P [ log ⁡ Q ] . H(P, Q) = -\mathbb{E}_{P}[\log Q]. H(P,Q)=EP[logQ].
对于二分类问题:

  • 真实分布 P P P:标签 y y y是确定的(0或1),可视为一个 Dirac delta分布
  • 预测分布 Q Q Q:模型输出的概率 y ^ \hat{y} y^
    交叉熵的表达式与负对数似然一致,因此最小化交叉熵等价于让预测分布逼近真实分布。
3. 优化视角:梯度性质
  • 交叉熵 vs 均方误差(MSE)
    若使用 MSE 损失 L = 1 2 ( y − y ^ ) 2 \mathcal{L} = \frac{1}{2}(y - \hat{y})^2 L=21(yy^)2,其梯度为:
    ∂ L ∂ w j = ( y − y ^ ) ⋅ y ^ ( 1 − y ^ ) ⋅ x j . \frac{\partial \mathcal{L}}{\partial w_j} = (y - \hat{y}) \cdot \hat{y} (1 - \hat{y}) \cdot x_j. wjL=(yy^)y^(1y^)xj.
    y ^ \hat{y} y^接近 0 或 1 时(预测置信度高),梯度中的 y ^ ( 1 − y ^ ) \hat{y}(1 - \hat{y}) y^(1y^)趋近于 0,导致 梯度消失,参数更新缓慢。

    交叉熵的梯度为:
    ∂ L ∂ w j = ( y ^ − y ) x j . \frac{\partial \mathcal{L}}{\partial w_j} = (\hat{y} - y) x_j. wjL=(y^y)xj.
    梯度直接正比于误差 ( y ^ − y ) (\hat{y} - y) (y^y),无论预测值大小,梯度始终有效,优化更高效。

4. 数学性质
  • 凸性:交叉熵损失函数在逻辑回归中是凸函数(Hessian矩阵半正定),保证梯度下降能找到全局最优解。
  • 概率校准性:交叉熵强制模型输出具有概率意义(需配合 sigmoid 函数),而 MSE 无此特性。

二、为什么不是其他损失函数?

1. 均方误差(MSE)的缺陷
  • 梯度消失问题(如上述)。
  • 对概率的惩罚不对称:
    y = 1 y=1 y=1时,预测 y ^ = 0.9 \hat{y}=0.9 y^=0.9的 MSE 损失为 0.01 0.01 0.01,而交叉熵损失为 − log ⁡ ( 0.9 ) ≈ 0.105 -\log(0.9) \approx 0.105 log(0.9)0.105
    交叉熵对错误预测(如 y ^ = 0.1 \hat{y}=0.1 y^=0.1 y = 1 y=1 y=1)的惩罚更严厉( − log ⁡ ( 0.1 ) ≈ 2.3 -\log(0.1) \approx 2.3 log(0.1)2.3),符合分类任务需求。
2. 其他替代损失函数
  • Hinge Loss(SVM使用)
    适用于间隔最大化,但对概率建模不直接,且优化目标不同。
  • Focal Loss
    改进交叉熵,解决类别不平衡问题,但需额外调整超参数。

三、交叉熵的数学推导

1. 从伯努利分布到交叉熵

假设样本独立,标签 y ∼ Bernoulli ( y ^ ) y \sim \text{Bernoulli}(\hat{y}) yBernoulli(y^),其概率质量函数为:
P ( y ∣ y ^ ) = y ^ y ( 1 − y ^ ) 1 − y . P(y \mid \hat{y}) = \hat{y}^y (1 - \hat{y})^{1 - y}. P(yy^)=y^y(1y^)1y.
对数似然函数为:
log ⁡ P ( y ∣ y ^ ) = y log ⁡ y ^ + ( 1 − y ) log ⁡ ( 1 − y ^ ) . \log P(y \mid \hat{y}) = y \log \hat{y} + (1 - y) \log (1 - \hat{y}). logP(yy^)=ylogy^+(1y)log(1y^).
最大化对数似然等价于最小化其负数,即交叉熵损失。

2. 梯度推导(矩阵形式)

设设计矩阵 X ∈ R N × D \mathbf{X} \in \mathbb{R}^{N \times D} XRN×D,权重 w ∈ R D \mathbf{w} \in \mathbb{R}^D wRD,偏置 b ∈ R b \in \mathbb{R} bR,预测值 y ^ = σ ( X w + b ) \hat{\mathbf{y}} = \sigma(\mathbf{X}\mathbf{w} + b) y^=σ(Xw+b)
交叉熵损失:
J ( w , b ) = − 1 N [ y ⊤ log ⁡ y ^ + ( 1 − y ) ⊤ log ⁡ ( 1 − y ^ ) ] . J(\mathbf{w}, b) = -\frac{1}{N} \left[ \mathbf{y}^\top \log \hat{\mathbf{y}} + (1 - \mathbf{y})^\top \log (1 - \hat{\mathbf{y}}) \right]. J(w,b)=N1[ylogy^+(1y)log(1y^)].
梯度计算:
∂ J ∂ w = 1 N X ⊤ ( y ^ − y ) , \frac{\partial J}{\partial \mathbf{w}} = \frac{1}{N} \mathbf{X}^\top (\hat{\mathbf{y}} - \mathbf{y}), wJ=N1X(y^y),
∂ J ∂ b = 1 N ∑ i = 1 N ( y ^ i − y i ) . \frac{\partial J}{\partial b} = \frac{1}{N} \sum_{i=1}^N (\hat{y}_i - y_i). bJ=N1i=1N(y^iyi).


四、实际应用中的设计原则

  1. 任务需求匹配:分类任务需概率输出,回归任务用 MSE。
  2. 优化效率:梯度应稳定且易于计算。
  3. 概率解释性:损失函数需与概率模型一致(如交叉熵配 sigmoid)。
  4. 鲁棒性:对异常值的敏感程度(交叉熵比 MSE 更敏感,需数据清洗)。

五、总结

逻辑回归的交叉熵损失函数是通过以下步骤设计的:

  1. 概率假设:假设数据服从伯努利分布。
  2. 最大似然估计:将参数估计问题转化为优化问题。
  3. 数学简化:取负对数似然,得到交叉熵形式。
  4. 优化验证:选择梯度性质更优的损失函数。

这种设计使得逻辑回归在二分类任务中高效、稳定,且输出具有概率意义,成为基础且强大的模型。

二、PyTorch 代码案例
import torch
import torch.nn as nn
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification# 生成数据
X, y = make_classification(n_samples=1000, n_features=2, n_redundant=0, n_clusters_per_class=1)
X = torch.tensor(X, dtype=torch.float32)
y = torch.tensor(y, dtype=torch.float32).view(-1, 1)# 定义模型
class LogisticRegression(nn.Module):def __init__(self, input_dim):super().__init__()self.linear = nn.Linear(input_dim, 1)def forward(self, x):return torch.sigmoid(self.linear(x))model = LogisticRegression(2)
criterion = nn.BCELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)# 训练
losses = []
for epoch in range(100):y_pred = model(X)loss = criterion(y_pred, y)loss.backward()optimizer.step()optimizer.zero_grad()losses.append(loss.item())# 可视化损失曲线
plt.plot(losses)
plt.title("Training Loss")
plt.show()# 决策边界可视化
w = model.linear.weight.detach().numpy()[0]
b = model.linear.bias.detach().numpy()x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.linspace(x_min, x_max, 100), np.linspace(y_min, y_max, 100))
Z = model(torch.tensor(np.c_[xx.ravel(), yy.ravel()], dtype=torch.float32)).detach().numpy()
Z = Z.reshape(xx.shape)plt.contourf(xx, yy, Z, alpha=0.8)
plt.scatter(X[:, 0], X[:, 1], c=y.squeeze(), edgecolors='k')
plt.title("Decision Boundary")
plt.show()

三、可视化展示
  • 数据分布:二维散点图展示类别分离情况。
  • 损失曲线:训练过程中损失值下降曲线。
  • 决策边界:等高线图显示模型预测分界线。

四、应用场景与优缺点
  • 应用场景
    信用评分、垃圾邮件检测、疾病预测(线性可分问题)。

  • 优点

    1. 计算高效,适合大规模数据。
    2. 输出概率解释性强。
  • 缺点

    1. 无法直接处理非线性关系。
    2. 对多重共线性敏感。

五、改进方法与数学推导
  1. 正则化

    • L2正则化:目标函数变为
      J reg = J ( w , b ) + λ 2 ∥ w ∥ 2 J_{\text{reg}} = J(\mathbf{w}, b) + \frac{\lambda}{2} \|\mathbf{w}\|^2 Jreg=J(w,b)+2λw2
      梯度更新:
      w ← w − η ( ∇ w J + λ w ) \mathbf{w} \leftarrow \mathbf{w} - \eta \left( \nabla_{\mathbf{w}} J + \lambda \mathbf{w} \right) wwη(wJ+λw)
  2. 特征工程
    添加多项式特征 x 1 2 , x 2 2 , x 1 x 2 x_1^2, x_2^2, x_1x_2 x12,x22,x1x2等,将数据映射到高维空间。

  3. 核方法
    通过核技巧隐式映射到高维空间(需结合其他模型如SVM)。


六、总结

逻辑回归通过概率建模解决二分类问题,代码简洁高效,但需注意其线性假设的限制。通过正则化、特征工程等手段可显著提升模型性能。

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

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

相关文章

2025年02月17日Github流行趋势

项目名称:OmniParser 项目地址url:https://github.com/microsoft/OmniParser 项目语言:Jupyter Notebook 历史star数:8971 今日star数:969 项目维护者:yadong-lu, ThomasDh-C, aliencaocao, nmstoker, kris…

RocketMQ 5.0安装部署

0.前言 在微服务架构逐渐成为主流的今天,消息队列如同数字世界的快递员,承担着系统间高效通信的重要使命。 Apache RocketMQ 自诞生以来,因其架构简单、业务功能丰富、具备极强可扩展性等特点被众多企业开发者以及云厂商广泛采用。历经十余…

Ubuntu 22.04.5 LTS 安装企业微信,(2025-02-17安装可行)

一、依赖包(Ubuntu 20.04/Debian 11) 点击下载https://www.spark-app.store/download_dependencies_latest 1、 下载最新的依赖包。 请访问星火应用商店依赖包下载页面, 下载最新的依赖包。2、解压依赖包 </

如何使用 HPjtune 分析 Java GC 日志并优化 JVM 性能

HPjtune 是一款用于分析 Java 应用程序垃圾回收&#xff08;GC&#xff09;日志的工具&#xff0c;主要用于优化 JVM 性能。虽然 HPjtune 本身并不直接生成 HTML 格式的报告&#xff0c;但可以通过结合其他工具或方法将分析结果导出为 HTML 格式。以下是实现这一目标的步骤和方…

国产FPGA开发板选择

FPGA开发板是学习和开发FPGA的重要工具&#xff0c;选择合适的开发板对学习效果和开发效率至关重要。随着国产FPGA的发展&#xff0c;淘宝上的许多FPGA开发板店铺也开始进行国产FPGA的设计和销售&#xff0c;本文将对国产FPGA和相关店铺做个简单梳理&#xff0c;帮助有需要使用…

Java高频面试之SE-22

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本baby今天又来了&#xff01;哈哈哈哈哈嗝&#x1f436; Java中的Optional了解多少&#xff1f; 在 Java 中&#xff0c;Optional 是 Java 8 引入的一个容器类&#xff0c;用于显式处理可能为 null 的…

使用OBS和nginx实现直播流

使用OBS和nginx实现直播流&#xff0c;如 1&#xff0c;下载OBS OBS用于视频录制和直播的免费开源软件。在 Windows、Mac 或 Linux 上快速轻松地下载并开始流式传输。官网下载 2&#xff0c;下载nginx 注意nginx需要下载带gryghon版本&#xff0c;这个才有rtmp模块&#xff0…

PyTorch 源码学习:阅读经验 代码结构

分享自己在学习 PyTorch 源码时阅读过的资料。本文重点关注阅读 PyTorch 源码的经验和 PyTorch 的代码结构。因为 PyTorch 不同版本的源码实现有所不同&#xff0c;所以笔者在整理资料时尽可能按版本号升序&#xff0c;版本号见标题前[]。最新版本的源码实现还请查看 PyTorch 仓…

python实现jaccard系数得出两个集合的相似度

python实现jaccard系数得出两个集合的相似度 1、简介 计算两个集合之间的Jaccard系数是一种常用的方法,用于衡量这两个集合的相似度。 Jaccard系数定义为两个集合交集大小与它们并集大小的比值。 Jaccard 系数的值范围在 0 到 1 之间,值越大表示两个集合越相似。 2、求两个…

小爱音箱控制手机和电视听歌的尝试

最近买了小爱音箱pro&#xff0c;老婆让我扔了&#xff0c;吃灰多年的旧音箱。当然舍不得&#xff0c;比小爱还贵&#xff0c;刚好还有一台红米手机&#xff0c;能插音箱&#xff0c;为了让音箱更加灵活&#xff0c;买了个2元的蓝牙接收模块Type-c供电3.5接口。这就是本次尝试起…

Pycharm+CodeGPT+Ollama+Deepseek

首先&#xff0c;体验截图&#xff1a; 接着&#xff1a; 1、下载Ollama&#xff1a; Download Ollama on macOS 2、下载模型 以1.5b为例&#xff0c;打开命令行&#xff0c;输入: ollama run deepseek-r1:1.5b 3、Pycharm安装Code GPT插件 打开PyCharm&#xff0c;找到文…

如何确保 for...in 循环按照特定顺序遍历对象属性

由于 for...in 循环遍历对象属性的顺序在 ECMAScript 规范中没有严格规定&#xff0c;若要确保按照特定顺序遍历对象属性&#xff0c;不能直接依赖 for...in 本身&#xff0c;不过可以借助一些其他方法来实现。以下是几种常见的解决方案&#xff1a; 1. 使用数组存储属性名并排…

25/2/17 <嵌入式笔记> 桌宠代码解析

这个寒假跟着做了一个开源的桌宠&#xff0c;我们来解析下代码&#xff0c;加深理解。 代码中有开源作者的名字。可以去B站搜着跟着做。 首先看下main代码 #include "stm32f10x.h" // Device header #include "Delay.h" #include &quo…

Qt中基于开源库QRencode生成二维码(附工程源码链接)

目录 1.QRencode简介 2.编译qrencode 3.在Qt中直接使用QRencode源码 3.1.添加源码 3.2.用字符串生成二维码 3.3.用二进制数据生成二维码 3.4.界面设计 3.5.效果展示 4.注意事项 5.源码下载 1.QRencode简介 QRencode是一个开源的库&#xff0c;专门用于生成二维码&…

【Android开发】华为手机安装包安装失败“应用是非正式版发布版本,当前设备不支持安装”问题解决

问题描述 我们将Debug版本的安装包发送到手机上安装&#xff0c;会发现华为手机有如下情况 解决办法 在文件gradle.properties中粘贴代码&#xff1a; android.injected.testOnlyfalse 最后点击“Sync now”&#xff0c;等待重新加载gradle资源即可 后面我们重新编译Debug安装…

前端面试手写--虚拟列表

目录 一.问题背景 二.代码讲解 三.代码改装 四.代码发布 今天我们来学习如何手写一个虚拟列表,本文将把虚拟列表进行拆分并讲解,然后发布到npm网站上. 一.问题背景 为什么需要虚拟列表呢?这是因为在面对大量数据的时候,我们的浏览器会将所有数据都渲染到表格上面,但是渲…

vue项目本地svg图标使用

提前准备&#xff1a; 1、一个本地的svg图片 这个直接从网上找一个就行 2、文件整体目录 安装插件 npm i vite-plugin-svg-iconsvite.config.ts中配置插件 完整代码 import { fileURLToPath, URL } from node:url import { resolve } from path import { defineConfig } f…

Go: 使用VS Code配置Go项目支持Windows与Linux双系统调试

在现代软件开发中&#xff0c;越来越多的开发者开始使用VS Code等集成开发环境&#xff08;IDE&#xff09;来提高生产力&#xff0c;特别是在支持远程开发时。VS Code的远程SSH功能&#xff0c;使得开发者可以在本地Windows电脑上&#xff0c;通过远程SSH连接到Linux服务器&am…

萌新学 Python 之集合 set

集合 set&#xff1a;使用一对大括号&#xff0c;元素写在大括号之间&#xff0c;使用逗号分隔 集合中的元素只能是不可变的数据类型&#xff0c;不能是列表、字典和集合 set1 {1, 2, 3} set2 {1, a, (1, 2, 3)} print(type(set1), type(set2)) # <class set> <c…

python中使用数据库sqlite3

Python使用sqlite3数据库 python3.x标准库内置了SQLite3 查看sqlite的版本 import sqlite3 sqlite_version sqlite3.sqlite_version print(f"SQLite version: {sqlite_version}") 显示 导入模块连接sqlitte3 import sqlite3 consqlite3.connect("d:/fi…