全量梯度下降(Batch Gradient Descent)实现线性回归

全量梯度下降(Batch Gradient Descent)实现线性回归

摘要:本文通过Python代码实现全量梯度下降算法,并应用于线性回归问题。代码使用动态调整学习率策略,最终得到接近真实值的模型参数。


1. 全量梯度下降简介

全量梯度下降(Batch Gradient Descent)是一种优化算法,其核心思想是在每一步迭代中使用全部训练数据计算梯度。与随机梯度下降(SGD)和小批量梯度下降(Mini-Batch GD)不同,全量梯度下降的梯度计算更稳定,但计算开销较大,适合数据量较小的场景。


2. 代码实现

2.1 导入库与数据生成

首先生成模拟数据,其中 y = 4 + 3x + 高斯噪声,并添加偏置项(截距项)x_b

import numpy as np

# 生成模拟数据
x = 2 * np.random.rand(100, 1)
y = 4 + 3 * x + np.random.randn(100, 1)
x_b = np.c_[np.ones((100, 1)), x]  # 添加偏置项

2.2 超参数与模型初始化

设置训练轮次,并初始化模型参数 theta(服从标准正态分布):

n_epochs = 10000        # 训练轮次
theta = np.random.randn(2, 1)  # 初始化参数

2.3 动态学习率调整

定义学习率调整函数,随着迭代次数增加逐渐减小学习率,避免震荡:

t0, t1 = 1, 200
def learning_rate_adjust(t):
    return t0 / (t + t1)  # 学习率逐步衰减

2.4 梯度下降迭代

全量梯度下降核心逻辑:计算梯度,更新参数:

for t in range(n_epochs):
    gradients = x_b.T.dot(x_b.dot(theta) - y)  # 计算梯度
    learning_rate = learning_rate_adjust(t)    # 调整学习率
    theta = theta - learning_rate * gradients  # 更新参数

2.5 输出结果

训练完成后打印模型参数:

print("训练后的参数 theta:")
print(theta)

输出结果

[[3.95883404]
 [3.09751776]]

3. 结果分析

真实参数为 [4, 3],训练后得到 [3.9588, 3.0975],接近真实值。说明全量梯度下降在此场景下有效。


4. 关键公式说明

  • 梯度计算
    梯度公式为:
    ∇ θ J ( θ ) = 1 m X T ( X θ − y ) \nabla_\theta J(\theta) = \frac{1}{m} X^T (X\theta - y) θJ(θ)=m1XT(y)
    代码中直接使用矩阵运算 x_b.T.dot(x_b.dot(theta) - y),省略了 1 m \frac{1}{m} m1,因为学习率调整已隐含缩放。

  • 参数更新
    θ t + 1 = θ t − η ∇ θ J ( θ ) \theta_{t+1} = \theta_t - \eta \nabla_\theta J(\theta) θt+1=θtηθJ(θ)
    其中 η \eta η 为动态调整的学习率。


5. 全量梯度下降的优缺点

  • 优点:梯度方向准确,收敛稳定。
  • 缺点:计算开销大,不适合大规模数据。

6. 完整代码

完整代码参考GitHub仓库


相关标签#机器学习 #梯度下降 #线性回归 #Python

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值