1.2.2 Logistic回归和梯度下降计算的数学流程

本文深入探讨Logistic回归的梯度下降法,通过计算图阐述前向和反向传播过程,利用链式法则求导,并详细解释如何应用于m个样本的梯度下降,最终展示算法的编程实现流程。

计算图

可以说,一个神经网络的计算都是按照前向或者反向传播过程来实现的,首先计算出神经网络的输出,紧接着一个反向传播的操作。后者,我们用来计算出对应的梯度或者导数。这个流程图解释了为什么用这样的方式来实现。

我们举一个更为简单的函数为例,如何计算该函数。具体流程如下:

这里写图片描述

流程图是用蓝色箭头画出来的,从左到右的计算过程。那么红色箭头是从右到左的导数计算过程。

计算图的导数计算

反向传播算法的实质实际上就是用微积分的链式法则求导的过程。

这里写图片描述

比如说我们算dJ/da的大小,就用链式法则反过来算一下。

logistic回归的梯度下降法

这一部分将介绍如何用导数流程图来计算梯度。

我们回忆一下逻辑回归公式,注意这里的a是预测值的意思等于y

### Logistic 回归梯度下降的关系 Logistic 回归是一种用于处理二分类问题的监督学习算法,它通过将输入特征的线性组合映射到 0 到 1 的概率范围来进行预测[^1]。然而,在实际应用中,我们需要找到最佳的模型参数以最小化损失函数(通常是交叉熵损失)。这一过程通常依赖于优化技术,其中最常用的方法之一就是梯度下降。 #### 梯度下降的作用 梯度下降是一种迭代优化算法,旨在寻找目标函数的局部极小值。对于 Logistic 回归而言,该目标函数即为损失函数 \( J(\theta) \),表示模型预测值与真实标签之间的差异程度。通过不断调整权重向量 \( \theta \),使得损失逐渐减小直至收敛至某个阈值范围内[^4]。 具体来说,每次更新都会沿着负梯度方向移动一定步长(由学习率决定),从而逐步逼近最优解: \[ \theta_j := \theta_j - \alpha \frac{\partial}{\partial \theta_j}J(\theta) \] 这里,\( \alpha \) 表示学习速率;而偏导数项则反映了当前点处沿各个维度的变化趋势。 #### Python 实现方式 下面展示如何利用 NumPy 库手动编写基于梯度下降法训练逻辑回归模型的核心部分: ```python import numpy as np def sigmoid(z): """Sigmoid 函数定义""" return 1 / (1 + np.exp(-z)) def compute_cost(X, y, theta): """ 计算成本/损失函数 参数: X -- 输入数据矩阵 shape(m,n), m=样本数量 n=特征数目 y -- 输出标签列向量 shape(m,) theta -- 权重参数列向量 shape(n+1,) (含截距) 返回值: cost -- 当前状态下计算得到的成本数值 scalar """ m = len(y) h = sigmoid(np.dot(X, theta)) epsilon = 1e-5 # 防止 log(0) 导致错误 cost = (-1/m)*((np.log(h + epsilon).T @ y)+(np.log(1-h + epsilon).T @(1-y))) return cost.flatten() def gradient_descent(X, y, theta, alpha, num_iters): """ 使用批量梯度下降方法执行参数拟合操作 参数: X -- 扩展后的输入数据矩阵 shape(m,n+1) y -- 输出标签列向量 shape(m,) theta -- 初始化权重参数列向量 shape(n+1,) alpha -- 学习率 float num_iters -- 迭代次数 int 返回值: theta -- 更新后的最终权重参数列向量 shape(n+1,) costs -- 历史记录下的每轮次对应的成本列表 list of floats """ m = len(y) costs = [] for i in range(num_iters): h = sigmoid(np.dot(X, theta)) error = h - y grad = (1/m)*(X.T @ error) theta -= alpha * grad if i % 100 == 0: # 只保存每隔一百次的结果以便绘图观察变化轨迹 current_cost = compute_cost(X, y, theta) costs.append(current_cost) return theta, costs ``` 上述代码片段展示了完整的从零开始构建逻辑回归模型所需的组件,包括激活函数 `sigmoid` 定义、代价函数 `compute_cost` 核心的学习机制 `gradient_descent` 。值得注意的是,为了简化说明并未加入正则化项或其他改进措施如随机抽样批次等高级特性[^2]^。 ### 总结 通过对理论基础的理解配合编程实战演练可以帮助我们更深刻掌握逻辑回归及其背后的数学本质。借助像 Scikit-Learn 这样的成熟框架固然方便快捷,但从头搭建整个流程同样具有重要意义因为它让我们清楚知道内部运作细节[^3].
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Einstellung

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值