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

神经网络的本质 逻辑回归 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.lryc.cn/news/574717.html

相关文章:

  • 蓝桥杯嵌入式学习(cubemxkeil5)
  • 从零开始学习Spring Cloud Alibaba (一)
  • PYTHON从入门到实践4-数据类型
  • 大模型时代的创业机遇
  • 快速搭建企业级私有仓库:Docker + Nexus3 私服指南
  • 数据结构知识点总结--绪论
  • 02-StarRocks数据导入导出FAQ
  • 域名 SSL证书和IP SSL证书有什么区别?
  • 15:00开始面试,15:06就出来了,问的问题有点变态。。。
  • OSS大数据分析集成:MaxCompute直读OSS外部表优化查询性能(减少数据迁移的ETL成本)
  • 内存泄漏系列专题分析之二十四:内存泄漏测试Camera相机进程内存指标分布report概述
  • C++【生存游戏】开发:荒岛往事 第一期
  • 机器学习×第十三卷:集成学习上篇——她不再独断,而是召集小队贴贴你
  • Leetcode-2563. 统计公平数对的数目
  • prometheus 配置邮件告警
  • Unity2D 街机风太空射击游戏 学习记录 #13 射击频率道具 最高分
  • 如何使typora图片不居中留白?
  • 【网络安全】从IP头部看网络通信:IPv4、IPv6与抓包工具 Wireshark 实战
  • WinUI3入门11:改变鼠标形状 设置光标
  • 鸿蒙应用开发中的状态管理:深入解析AppStorage与LocalStorage
  • 基于Qt C++的影像重采样批处理工具设计与实现
  • jenkinsfile调用groovy
  • 服务器安装指南
  • 从iOS到Flutter:我的转型之路与技术成长启示
  • Redis哈希表Rehash全解析:扩容缩容背后的渐进式智慧
  • 一种集成统计、视觉和基于规则方法的新型可解释医学图像分类人工智能框架|文献速递-最新论文分享
  • ffmpeg下载地址
  • wpf单文件打包还有 一些dll打包不进去?
  • 基于单片机的语音控制设计(论文)
  • PYTHON从入门到实践2-环境配置与字符串打印用法