神经网络的本质 逻辑回归 python的动态展示

神经网络的本质 逻辑回归 python的动态展示

    • 逻辑回归运行图
    • 相关代码
    • 什么是逻辑回归
    • 和ai的关系
    • 逻辑回归公式流程与实际案例解析
        • **一、逻辑回归的数学公式流程**
          • 1. **线性组合阶段**
          • 2. **激活函数(Sigmoid)**
          • 3. **概率预测与决策**
          • 4. **交叉熵损失函数**
          • 5. **梯度下降优化**
        • **二、实际案例:肿瘤良恶性预测**
          • **1. 初始化参数**
          • **2. 前向传播计算预测概率**
          • **3. 计算交叉熵损失**
          • **4. 计算梯度并更新参数**
          • **5. 迭代优化**
          • **6. 最终决策边界**
        • **三、与代码的结合解析**
        • **四、逻辑回归的本质与局限**

逻辑回归运行图

在这里插入图片描述

在这里插入图片描述

相关代码

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import time
from matplotlib.gridspec import GridSpec# 解决中文显示问题
plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]
plt.rcParams["axes.unicode_minus"] = False# 生成模拟数据
np.random.seed(int(time.time()))
n_samples = 200
X = np.vstack([np.random.normal([-1, -1], 1, size=(n_samples, 2)),np.random.normal([1, 1], 1, size=(n_samples, 2))
])
y = np.hstack([np.zeros(n_samples), np.ones(n_samples)])# 激活函数
def sigmoid(x):return 1 / (1 + np.exp(-x))# 训练函数
def train(X, y, lr=0.01, epochs=300, save_every=10):n_samples, n_features = X.shapeW = np.random.randn(n_features)b = 0w_history = [W.copy()]b_history = [b]loss_history = []for epoch in range(epochs):linear_output = np.dot(X, W) + by_pred = sigmoid(linear_output)dW = (1 / n_samples) * np.dot(X.T, (y_pred - y))db = (1 / n_samples) * np.sum(y_pred - y)W -= lr * dWb -= lr * dbif epoch % save_every == 0:w_history.append(W.copy())b_history.append(b)loss = -np.mean(y * np.log(y_pred) + (1 - y) * np.log(1 - y_pred))loss_history.append(loss)print(f"Epoch {epoch}, Loss: {loss:.4f}")return w_history, b_history, loss_history# 预测函数
def predict(X, W, b):linear_output = np.dot(X, W) + by_pred = sigmoid(linear_output)return np.round(y_pred)# 动画更新函数(使用GridSpec管理布局)
def update(frame, w_history, b_history, X, y, gs):W = w_history[frame]b = b_history[frame]plt.clf()fig = plt.gcf()fig.set_size_inches(10, 8)# 主图:数据点和决策边界ax1 = fig.add_subplot(gs[0, :])ax1.scatter(X[y == 0, 0], X[y == 0, 1], c='blue', label='类别0', alpha=0.8)ax1.scatter(X[y == 1, 0], X[y == 1, 1], c='red', label='类别1', alpha=0.8)# 绘制决策边界x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1xx, yy = np.meshgrid(np.linspace(x_min, x_max, 200), np.linspace(y_min, y_max, 200))Z = predict(np.c_[xx.ravel(), yy.ravel()], W, b)Z = Z.reshape(xx.shape)ax1.contourf(xx, yy, Z, alpha=0.3, cmap='viridis')ax1.contour(xx, yy, Z, colors='k', linewidths=1)ax1.set_xlabel('特征1', fontsize=12)ax1.set_ylabel('特征2', fontsize=12)ax1.set_title(f'逻辑回归训练过程 - 迭代 {frame * 10}', fontsize=14)ax1.legend()# 子图:损失曲线(使用GridSpec管理)ax2 = fig.add_subplot(gs[1, :])ax2.plot(range(len(loss_history))[1:], loss_history[1:], 'r-')ax2.set_title('损失曲线')ax2.set_xlabel('迭代 (x10)')ax2.set_ylabel('损失')ax2.grid(True)# 使用GridSpec后无需tight_layout# plt.tight_layout()  # 取消此行# 训练模型
w_history, b_history, loss_history = train(X, y, lr=0.05, epochs=300, save_every=5)# 配置GridSpec布局
fig = plt.figure(figsize=(12, 10))
gs = GridSpec(2, 1, height_ratios=[3, 1], figure=fig)  # 主图占3份,子图占1份# 创建动画
ani = FuncAnimation(fig, update,frames=len(w_history),fargs=(w_history, b_history, X, y, gs),interval=100,repeat=True
)plt.show()
plt.close('all')

什么是逻辑回归

Logistic regression

  1. 分类算法
  2. 用于二分类问题
  3. 核心是构建线性模型
  4. 使用sigmoid函数将线性输出映射到【0,1】区间
  5. 常用于垃圾邮件分析、风险控制、概率预测、特征分析

在这里插入图片描述

在这里插入图片描述
sigmoid函数可以很好的处理输入的异常数据,并将输出结果控制在【0,1】之间

在这里插入图片描述
线性回归使用 回归线和所有点之间的平方差进行判断
而对于逻辑回归使用了交叉熵损失;
在这里插入图片描述

和ai的关系

  1. AI 的基础组成部分:
    人工智能的核心是让机器具备 “学习” 和 “决策” 能力,而逻辑回归作为最简单的机器学习算法之一,是 AI 领域的基础工具。它体现了 AI 中 “通过数据训练模型进行预测” 的核心思想。
  2. 可解释性 AI 的代表:
    相比复杂的深度学习模型,逻辑回归的参数(权重和偏置)具有明确的物理意义,便于人类理解决策依据,因此在医疗、金融等对可解释性要求高的场景中不可或缺。
  3. 复杂 AI 系统的前置步骤:
    在构建复杂 AI 系统时,逻辑回归常作为基线模型(Baseline Model),用于对比更复杂模型的效果,或作为特征工程的验证工具。

同时,逻辑回归本质就是单层神经网络,(仅有输入、输出层)
当神经网络仅有一个输出节点且使用sigmoid激活函数 == 逻辑回归
逻辑回归使用梯度下降法优化交叉熵损失,而神经网络使用了反向传播算法(扩展的梯度下降)优化损失;

逻辑回归公式流程与实际案例解析

一、逻辑回归的数学公式流程
1. 线性组合阶段

逻辑回归的基础是线性模型,首先对输入特征进行线性组合:

z = w₁x₁ + w₂x₂ + ... + wₙxₙ + b = X·W + b
  • X:输入特征向量(维度为n)
  • W:权重向量(模型参数)
  • b:偏置项(截距)
  • z:线性组合的结果
2. 激活函数(Sigmoid)

线性组合的结果通过sigmoid函数映射到[0,1]区间,表示样本属于正类的概率:

σ(z) = 1 / (1 + e^(-z))

sigmoid函数的特性:

  • 当z→+∞时,σ(z)→1(属于正类的概率高)
  • 当z→-∞时,σ(z)→0(属于负类的概率高)
  • 导数特性:σ’(z) = σ(z)(1-σ(z)),这对梯度计算很重要
3. 概率预测与决策

预测概率:

P(y=1|X) = σ(z) = 1 / (1 + e^(-X·W - b))
P(y=0|X) = 1 - σ(z)

决策规则:

y_pred = {1, if σ(z) ≥ 0.5; 0, otherwise}
4. 交叉熵损失函数

逻辑回归使用交叉熵作为损失函数,衡量预测概率与真实标签的差异:

单个样本损失:
L(ŷ, y) = -[y·log(ŷ) + (1-y)·log(1-ŷ)]m个样本的平均损失:
J(W, b) = -(1/m)∑[y⁽ⁱ⁾·log(ŷ⁽ⁱ⁾) + (1-y⁽ⁱ⁾)·log(1-ŷ⁽ⁱ⁾)]
  • y:真实标签(0或1)
  • ŷ:预测概率(σ(z))
5. 梯度下降优化

计算损失函数对参数的梯度:

dJ/dW = (1/m)∑(ŷ - y)·X
dJ/db = (1/m)∑(ŷ - y)

参数更新公式:

W = W - α·dJ/dW
b = b - α·dJ/db
  • α:学习率
二、实际案例:肿瘤良恶性预测

下面以一个简化的肿瘤预测问题为例,演示逻辑回归的完整计算过程。

问题设定:

  • 特征:肿瘤大小(cm)、细胞异型性评分(1-10)
  • 标签:1(恶性),0(良性)
  • 样本数据:3个训练样本
肿瘤大小(x₁)异型性评分(x₂)恶性(y)
2.571
1.840
3.281
1. 初始化参数

设初始权重和偏置为:

W = [0, 0]
b = 0
学习率α = 0.1
2. 前向传播计算预测概率

以第一个样本(2.5, 7)为例:

z = 0×2.5 + 0×7 + 0 = 0
ŷ = σ(0) = 1/(1+e^0) = 0.5

三个样本的预测概率:

  • 样本1: ŷ=0.5
  • 样本2: ŷ=0.5
  • 样本3: ŷ=0.5
3. 计算交叉熵损失

单个样本损失:

  • 样本1: -[1·log(0.5) + 0·log(0.5)] = -log(0.5) ≈ 0.693
  • 样本2: -[0·log(0.5) + 1·log(0.5)] = -log(0.5) ≈ 0.693
  • 样本3: -[1·log(0.5) + 0·log(0.5)] = -log(0.5) ≈ 0.693

平均损失:

J = (0.693 + 0.693 + 0.693)/3 ≈ 0.693
4. 计算梯度并更新参数

计算每个样本的(ŷ - y):

  • 样本1: 0.5 - 1 = -0.5
  • 样本2: 0.5 - 0 = 0.5
  • 样本3: 0.5 - 1 = -0.5

计算梯度:

dJ/dW₁ = (1/3)[(-0.5)×2.5 + 0.5×1.8 + (-0.5)×3.2]= (1/3)[-1.25 + 0.9 - 1.6] = (1/3)(-1.95) = -0.65dJ/dW₂ = (1/3)[(-0.5)×7 + 0.5×4 + (-0.5)×8]= (1/3)[-3.5 + 2 - 4] = (1/3)(-5.5) ≈ -1.833dJ/db = (1/3)[-0.5 + 0.5 - 0.5] = (1/3)(-0.5) ≈ -0.167

参数更新:

W₁ = 0 - 0.1×(-0.65) = 0.065
W₂ = 0 - 0.1×(-1.833) = 0.1833
b = 0 - 0.1×(-0.167) = 0.0167
5. 迭代优化

重复前向传播、损失计算和梯度更新过程,直到损失收敛。假设经过100次迭代后,参数收敛到:

W = [0.8, 1.2]
b = -5.0
6. 最终决策边界

决策边界方程为:

0.8x₁ + 1.2x₂ - 5 = 0

当样本满足0.8x₁ + 1.2x₂ - 5 ≥ 0时,预测为恶性肿瘤;否则为良性。

三、与代码的结合解析
  1. 数据生成:创建两类二维数据点
  2. sigmoid函数:实现激活函数
  3. train函数
    • 初始化参数W和b
    • 前向传播计算z和ŷ
    • 计算交叉熵损失
    • 计算梯度并更新参数
    • 记录训练过程

代码中的核心公式对应关系:

  • linear_output = np.dot(X, W) + b 对应 z = X·W + b
  • y_pred = sigmoid(linear_output) 对应 ŷ = σ(z)
  • loss = -np.mean(y * np.log(y_pred) + (1 - y) * np.log(1 - y_pred)) 对应交叉熵损失
  • dW = (1 / n_samples) * np.dot(X.T, (y_pred - y)) 对应梯度计算
四、逻辑回归的本质与局限

逻辑回归本质上是通过线性模型拟合样本的对数几率(log-odds):

log(ŷ/(1-ŷ)) = X·W + b

这使得它能够处理概率意义上的分类问题。

局限性

  • 只能处理线性可分问题(通过特征工程可部分解决)
  • 对异常值敏感
  • 无法自动学习特征间的复杂交互

但作为基础模型,逻辑回归在工业界仍有广泛应用,尤其在需要可解释性的场景中(如金融风控、医疗诊断)。

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

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

相关文章

sql server中的with 锁各种区别

📘 SQL Server 常用 WITH (Hint) 用法与组合场景对照表 Hint 组合作用说明常见用途是否阻塞他人是否读脏数据备注WITH (NOLOCK)不加共享锁,允许读取未提交数据报表导出、大数据分页❌✅等价于 READ UNCOMMITTED,脏读风险高WITH (HOLDLOCK)保持…

KES数据库部署工具使用

一、启动部署工具 Windows系统 #命令行 ${安装目录}/ClientTools/guitools/DeployTools/deploy.exeLinux系统 #命令行 [rootnode ~]# ${安装目录}/ClientTools/guitools/DeployTools/deploy二、环境配置 1.硬件要求 #都是最小配置 CPU:主流32或64位 内存&#…

TB62211FNG是一款采用时钟输入控制的PWM斩波器的两相双极步进电机驱动器

TB62211FNG是一款采用时钟输入控制的PWM斩波器的两相双极步进电机驱动器。该器件采用BiCD工艺制造,额定电压为40伏/1.0安培。片上电压调节器允许使用单一VM电源控制步进电机。 特点: • 双极性步进电机驱动器 • 脉冲宽度调制(PWM&#xf…

uni-app项目实战笔记24--uniapp实现图片保存到手机相册

前提条件:微信小程序要想实现保存图片到本地相册需要到微信公众平台--小程序--开发管理中配置服务器域名中的downloadFile合法域名: \uniapp提供了saveImageToPhotosAlbum API实现保存的图片到本地相册。下面是它的配置参数: 参数名类型必填…

面试题-定义一个函数入参数是any类型,返回值是string类型,如何写出这个函数,代码示例

在 TypeScript 里,要定义一个入参为any类型、返回值为string类型的函数,可参考下面几种实现方式: 1. 基础实现 直接把入参转换为字符串返回。 function anyToString(input: any): string {return String(input); // 使用String()进行类型转…

TensorFlow深度学习实战——Transformer模型评价指标

TensorFlow深度学习实战——Transformer模型评价指标 0. 前言1. 质量1.1 GLUE1.2 SuperGLUE1.3 SQuAD1.4 RACE1.5 NLP-progress2. 参数规模3. 服务成本相关链接0. 前言 可以使用多种类型的指标评估 Transformer 模型。在本节中,我们将学习一些用于评估 Transformer 的关键因素…

linux内核学习(一)---内核社区介绍及补丁提交

目录 一、引言 二、内核源码 三、内核社区 ------>3.1、社区的组织架构 ------>3.2、内核社区的工作方式 ------>3.3、内核社区核心网站 ------------>3.3.1、Linux Kernel 官网 ------------>3.3.2、Linux Kernel 邮件列表(LKML) ------------>3.3…

轻量级web开发框架之Flask web开发框架学习:get请求数据的发送

Flask是一个使用 Python 编写的轻量级 Web 应用框架,简介灵活,可快速构建开发框架。 协作流程示例 客户端请求 → Web服务器(Nginx) → WSGI服务器(Gunicorn/uWSGI)↓WSGI协议传递请求数据(env…

Vue 3 异步三剑客:Suspense、async setup() 和 await 的戏剧性关系,白屏的解决

文章目录 🎭 Vue 3 异步三剑客:Suspense、async setup() 和 await 的戏剧性关系,白屏的解决🎬 角色介绍🎭 正常演出流程(有 Suspense 时)💥 灾难场景(缺少 Suspense 时&a…

【JavaScript-Day 48】告别 Ajax,拥抱现代网络请求:Fetch API 完全指南

Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…

BUUCTF在线评测-练习场-WebCTF习题[极客大挑战 2019]Knife1-flag获取、解析

解题思路 这题没有什么解题思路,打开靶场,标题是白给的shell 页面显示了 eval($_POST["Syc"]); 这是php webshell命令,密码为Syc,可直接通过该命令连接,根据标题提示,直接尝试用蚁剑连接 连接成…

Qt—(Qt线程,Qt进程,,QT与sqlite数据库)

一 Qt线程与进程概述 线程与进程对比 特性线程 (QThread)进程 (QProcess)内存空间共享父进程内存独立内存空间创建开销小 (几MB)大 (几十MB)通信方式共享内存/信号槽管道/套接字/文件崩溃影响导致整个进程终止仅自身终止适用场景高并发任务、计算密集型隔离第三方应用、安全需求…

计算机视觉阶段一:CV入门基础

目录 学习目标: 一、核心知识点 二、实用工具推荐 三、学习内容与步骤 1.环境搭建 2.图像获取与显示 3 图像基础处理 4 图像几何变换 5 图像像素操作 四、实战任务建议 实战 1:图像加载 显示 保存 实战 2:灰度图 边缘检测 图…

新增MCP接入和AutoAgent,汉得灵猿AI中台1.6版正式发布!

汉得灵猿(大圣)AI中台1.6版本,经过数月迭代,现已正式发布! 新版本最被期待的新功能,无疑是4月份预告的MCP接入,而令人同样激动的另一项新功能,则是AutoAgent动态规划智能体。除了两…

总结汇报思路

一、明确汇报目标 受众需求:领导/客户/团队最关心什么?(结果?问题?下一步计划?) 核心目的:展示成果?争取资源?总结经验?解决问题? 时…

文件锁的艺术:深入解析 `fcntl(F_SETLK/F_GETLK)`

引言:在共享资源时代守护数据一致性 在多进程/多线程的应用场景中,文件作为一种共享资源常常面临被并发访问的挑战。想象一个数据库系统,多个客户端可能同时尝试修改同一数据文件;或者一个配置文件,需要确保在更新时不…

一个免费的视频、音频、文本、图片多媒体处理工具

大家好,我是小悟。 给大家推荐一款可以免费使用的视频、音频、文本、图片处理工具,名字叫百创工坊,不用下载,不用注册,有免费的用就赶紧薅吧。 视频工具 提取音频:从视频中提取音频文件,支持多…

在 ef core 中操作复杂类型的序列化和反序列化时,如何全局设置 utf-8 编码避免中文字符被转义?

我们在使用 Entity Framework Core(EF Core) 时,如果希望 全局设置 JSON 序列化和反序列化使用 UTF-8 编码,通常需要配置 System.Text.Json 的默认行为,因为 EF Core 6.0 及以上版本默认使用 System.Text.Json 进行 JS…

WPF CommunityToolkit.Mvvm 信使 (ObservableRecipient)

WPF CommunityToolkit.Mvvm 中的 ObservableRecipient 是什么? ObservableRecipient 是 .NET Community Toolkit MVVM 库中的一个核心类,继承自 ObservableObject。它专为 WPF 应用设计,提供以下核心功能: 基础数据绑定支持&am…

《C++》命名空间简述

文章目录 一、命名空间定义二、访问命名空间内的成员三、标准命名空间:std四、嵌套命名空间 一、命名空间定义 在C中,命名空间(namespace)是一种将标识符分组的机制,用于避免重命名。例如: int a 3;int main() {int a 0;print…