逻辑回归求梯度的数学推导

本文详细解析了逻辑回归中梯度公式的推导过程,从代价函数出发,利用链式法则逐步推导出更新参数的梯度公式,为理解并实现逻辑回归算法提供了数学基础。

做ex_2的时候,碰到一个求梯度公式,在此手推一波. 如下:

δJ(θ)δθj=1m∑i=1m(hθ(x)(i)−y(i))xj(i)\frac{\delta J(\theta)}{\delta\theta_j}=\frac {1}{m}\sum_{i=1}^m(h_\theta(x)^{(i)}-y^{(i)})x^{(i)}_jδθjδJ(θ)=m1i=1m(hθ(x)(i)y(i))xj(i)

  1. 前提:cost functionJ(θ)=1m∑i=1m[−y(i)log(hθ(x(i)))−(1−y(i))log(1−hθ(x(i)))]J(\theta)=\frac 1m\sum_{i=1}^m[-y^{(i)}log(h_\theta(x^{(i)}))-(1-y^{(i)})log(1-h_\theta(x^{(i)}))]J(θ)=m1i=1m[y(i)log(hθ(x(i)))(1y(i))log(1hθ(x(i)))]hypothesis
    hθ(x(i))=g(x(i)θ)h_\theta(x^{(i)})=g(x{(i)}\theta)hθ(x(i))=g(x(i)θ)Logistic function
    g(x)=11+exp(−x),exp(x)=exg(x)=\frac 1{1+exp(-x)}, exp(x)=e^xg(x)=1+exp(x)1,exp(x)=ex
  2. 推导过程:
    δJ(θ)δθj=−1m(y(i)hθ′(x(i))hθ(x(i))+(1−y(i))−hθ′(x(i))1−hθ(x(i)))\frac{\delta J(\theta)}{\delta\theta_j}=-\frac1m(y^{(i)}\frac{h^{'}_\theta(x^{(i)})}{h_\theta(x^{(i)})}+(1-y^{(i)})\frac{-h^{'}_\theta(x^{(i)})}{1-h_\theta(x^{(i)})})δθjδJ(θ)=m1(y(i)hθ(x(i))hθ(x(i))+(1y(i))1hθ(x(i))hθ(x(i)))
    =−1my(i)hθ′(x(i)(1−hθ(x(i)))−(1−y(i))hθ′(x(i))hθ(x(i))hθ(x(i))(1−hθ(x(i)))=-\frac1m\frac{y^{(i)}h^{'}_\theta(x^{(i)}(1-h_\theta(x^{(i)}))-(1-y^{(i)}){h^{'}_\theta(x^{(i)})}{h_\theta(x^{(i)})}}{h_\theta(x^{(i)})(1-h_\theta(x^{(i)}))}=m1hθ(x(i))(1hθ(x(i)))y(i)hθ(x(i)(1hθ(x(i)))(1y(i))hθ(x(i))hθ(x(i))
    =−1m(y(i)−hθ(x(i)))hθ′(x(i))hθ(x(i))(1−hθ(x(i)))...............(1) =-\frac1m\frac{(y^{(i)}-h_\theta(x^{(i)}))h^{'}_\theta(x^{(i)})}{h_\theta(x^{(i)})(1-h_\theta(x^{(i)}))}...............(1)=m1hθ(x(i))(1hθ(x(i)))(y(i)hθ(x(i)))hθ(x(i))...............(1)
    设H(x)=x(i)θ,则hθ′(x(i))=−eH(x)(1+e−H(x))2H′(x).......(2) 设H(x)=x{(i)}\theta, 则h^{'}_\theta(x^{(i)})=-\frac{e^H(x)}{(1+e^-H(x))^2}H^{'}(x).......(2)H(x)=x(i)θ,hθ(x(i))=(1+eH(x))2eH(x)H(x).......(2)
    hθ(x(i))(1−hθ(x(i)))=eH(x)(1+e−H(x))2..........(3)h_\theta(x^{(i)})(1-h_\theta(x^{(i)}))= \frac{e^H(x)}{(1+e^-H(x))^2}..........(3)hθ(x(i))(1hθ(x(i)))=(1+eH(x))2eH(x)..........(3)
    H′(x)=θj(i)................(4) H^{'}(x)=\theta_j^{(i)}................(4)H(x)=θj(i)................(4)
    将(2)(3)(4)代入(1)得δJ(θ)δθj=1mxj(i)(hθ(x)(i)−y(i))xj(i) 将(2)(3)(4)代入(1)得\frac{\delta J(\theta)}{\delta\theta_j}=\frac {1}{m}x^{(i)}_j(h_\theta(x)^{(i)}-y^{(i)})x^{(i)}_j(2)(3)(4)1δθjδJ(θ)=m1xj(i)(hθ(x)(i)y(i))xj(i)
<think>好的,用户现在问的是逻辑回归梯度下降做法。之前他们询问了如何将二维的线性回归可视化代码修改为三维的情况,现在转向了逻辑回归的优化方法。这说明用户可能在学习机器学习算法,尤其是监督学习中的分类问题。逻辑回归虽然名字里有“回归”,但其实是分类模型,常用于二分类,用户可能对此有些混淆,需要明确区分。 用户的问题是关于梯度下降的具体做法,可能需要详细的数学推导和步骤解释。梯度下降是优化损失函数的常用方法,逻辑回归的损失函数和线性回归不同,用的是对数损失(log loss)。需要先回顾逻辑回归的基本原理,再引入梯度下降的更新规则。 首先,我需要确认用户是否了解逻辑回归的假设函数,即sigmoid函数。因为梯度下降的推导基于这个函数。假设用户已经知道,但可能需要简要复习。然后,需要解释损失函数,即对数似然函数,以及如何通过梯度下降来最小化它。 接下来,用户可能需要了解梯度下降的具体步骤,包括参数的初始化、计算梯度、更新参数等。还要注意学习率的选择,迭代次数的设置,以及收敛条件的判断。此外,是否需要比较批量梯度下降、随机梯度下降和小批量梯度下降的区别?可能用户暂时只需要基础的批量梯度下降,但可以简要提及其他变种。 另外,用户可能对向量化实现感兴趣,因为在实际编程中,使用向量化可以提升计算效率。比如,如何用矩阵运算代替循环,这在Python的NumPy库中很常见。同时,可能需要提到正则化,比如L2正则化,以防止过拟合,但用户的问题没有提到正则化,可能暂时不需要深入,但可以作为扩展点。 回顾之前的对话,用户在处理代码时涉及到了NumPy和Matplotlib,可能有一定的编程基础,所以示例代码可能对他们有帮助。但用户现在的问题更偏向理论推导,所以需要平衡数学公式和实际实现步骤。 用户可能需要知道为什么梯度下降适用于逻辑回归,以及梯度的具体推导过程。这需要一步步展示如何对损失函数导,得到梯度表达式。这时候要注意数学符号的清晰,使用LaTeX公式,并确保逻辑严谨,避免错误。 还要考虑用户可能的误区,比如将逻辑回归梯度下降与线性回归的梯度下降混淆,因为两者在形式上相似,但损失函数不同。需要强调sigmoid函数带来的不同导数结果。 最后,总结步骤,确保用户能够按照步骤实现逻辑回归梯度下降,并可能给出一个简单的代码框架,用NumPy实现,这样他们可以将理论应用到实际编码中。</think>以下是**逻辑回归梯度下降法**的详细步骤和实现原理,采用数学推导与代码示例结合的方式说明: --- ### 一、逻辑回归核心公式 #### 1. 假设函数 (Sigmoid函数) $$ h_{\theta}(x) = \frac{1}{1 + e^{-\theta^T x}} $$ 其中 $\theta$ 为参数向量,$x$ 为特征向量。输出值在 $(0,1)$ 之间,表示**样本属于正类的概率**。 #### 2. 损失函数 (对数损失) $$ J(\theta) = -\frac{1}{m} \sum_{i=1}^{m} \left[ y^{(i)} \log(h_{\theta}(x^{(i)})) + (1-y^{(i)}) \log(1 - h_{\theta}(x^{(i)})) \right] $$ 其中 $m$ 为样本数量,$y^{(i)} \in \{0,1\}$ 为标签。 --- ### 二、梯度下降推导 #### 1. 计算梯度 对参数 $\theta_j$ 偏导: $$ \frac{\partial J(\theta)}{\partial \theta_j} = \frac{1}{m} \sum_{i=1}^{m} \left( h_{\theta}(x^{(i)}) - y^{(i)} \right) x_j^{(i)} $$ #### 2. 参数更新公式 $$ \theta_j := \theta_j - \alpha \frac{\partial J(\theta)}{\partial \theta_j} $$ 其中 $\alpha$ 为学习率,控制更新步长。 --- ### 三、梯度下降实现步骤 #### 1. 数据预处理 ```python import numpy as np # 添加偏置项 x0=1 X = np.hstack([np.ones((m, 1)), X_features]) # 维度 (m, n+1) y = y.reshape(-1, 1) # 确保维度 (m, 1) theta = np.zeros((n+1, 1)) # 参数初始化 ``` #### 2. 迭代更新参数 ```python alpha = 0.01 # 学习率 iterations = 1000 # 迭代次数 for _ in range(iterations): # 计算预测值 z = X.dot(theta) h = 1 / (1 + np.exp(-z)) # Sigmoid函数 # 计算梯度 gradient = (1/m) * X.T.dot(h - y) # 向量化计算 # 更新参数 theta -= alpha * gradient # 可选:打印损失值 # loss = - (y * np.log(h) + (1-y)*np.log(1-h)).mean() # print(f"Iter {_}, Loss: {loss:.4f}") ``` --- ### 四、关键细节说明 1. **向量化计算** - 通过矩阵运算 $\boldsymbol{X}^T (\boldsymbol{h} - \boldsymbol{y})$ 一次性计算所有参数的梯度,避免循环,显著提升计算效率。 2. **学习率选择** - 典型值:0.001、0.003、0.01、0.03(可通过网格搜索优化) - 学习率过大可能导致震荡不收敛,过小则收敛速度慢。 3. **特征标准化** - 若特征量纲差异大,需先标准化: $$ x_j := \frac{x_j - \mu_j}{\sigma_j} $$ - 加速收敛,避免某些特征主导梯度方向。 --- ### 五、梯度下降变种 | 类型 | 更新频率 | 特点 | |-------------------|-------------------------|------------------------------| | 批量梯度下降 (BGD) | 每次用全部样本计算梯度 | 稳定但内存消耗大 | | 随机梯度下降 (SGD) | 每次随机选1个样本更新 | 速度快,适合大数据,震荡明显 | | 小批量梯度下降 (MBGD)| 每次用mini-batch样本 | 平衡速度与稳定性 | --- ### 六、数学推导验证 以 $\theta_j$ 偏导数推导为例: 1. Sigmoid导数性质: $$ \frac{d}{dz} \sigma(z) = \sigma(z)(1 - \sigma(z)) $$ 2. 链式导: $$ \frac{\partial J}{\partial \theta_j} = \frac{1}{m} \sum_{i=1}^{m} \left( \frac{\partial J}{\partial h^{(i)}} \cdot \frac{\partial h^{(i)}}{\partial z^{(i)}} \cdot \frac{\partial z^{(i)}}{\partial \theta_j} \right) $$ 最终化简得: $$ \frac{1}{m} \sum_{i=1}^{m} (h^{(i)} - y^{(i)}) x_j^{(i)} $$ --- ### 七、可视化收敛过程 ```python # 记录损失历史 loss_history = [] for _ in range(iterations): # ...(参数更新代码) loss = - (y * np.log(h) + (1-y)*np.log(1-h)).mean() loss_history.append(loss) # 绘制损失曲线 plt.plot(loss_history) plt.xlabel('Iterations') plt.ylabel('Loss') plt.title('Convergence of Gradient Descent') plt.show() ``` 输出曲线应呈现**单调递减**趋势,若出现震荡需调小学习率。 ![梯度下降收敛曲线](https://miro.medium.com/v2/resize:fit:720/format:webp/1*4Qxx2nw47jP9R4Z7WvGnAg.png) --- 通过以上步骤,即可实现逻辑回归梯度下降优化。实际应用中还需考虑正则化、早期停止等优化策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值