# 导入numpy库,用于高效的数值计算(矩阵运算、随机数生成等),别名np是Python社区的常用约定
import numpy as np
# ===================== 1. 构造模拟数据集 =====================
# 创建特征矩阵X:生成100个样本,每个样本包含1个特征,取值为[0,1)之间的均匀随机数
X = np.random.rand(100, 1)
# 构造标签y:模拟真实线性关系 y = 4(截距) + 3*X(特征系数) + 噪声
# np.random.randn(100, 1):生成符合标准正态分布(均值0、方差1)的噪声,让数据更接近真实场景
y = 4 + 3*X + np.random.randn(100, 1)
# 给特征矩阵添加偏置项(对应线性模型的截距w0):在X的每一行前拼接1
# 最终X_b的形状是(100, 2),每一行是 [1, X_i],用于后续计算 w0*1 + w1*X_i
X_b = np.c_[np.ones((100, 1)), X]
# ===================== 2. 设置梯度下降超参数 =====================
# 学习率(步长):控制参数每次更新的幅度
# - 过大会导致参数震荡、无法收敛;过小会导致收敛速度极慢
learning_rate = 0.001
# 迭代次数:梯度下降的循环轮数
# 通常不依赖“收敛阈值”,而是用足够多的迭代次数保证参数接近最优解
n_iterations = 10000
# ===================== 3. 初始化模型参数 =====================
# 初始化theta:包含线性模型的2个参数(w0:截距,w1:特征X的系数)
# np.random.randn(2, 1):用标准正态分布(均值0、方差1)随机生成初始值
theta = np.random.randn(2, 1)
# ===================== 4. 梯度下降核心迭代过程 =====================
for _ in range(n_iterations): # 循环执行n_iterations次参数更新
# 计算损失函数的梯度
# - 预测值:X_b.dot(theta) = w0*1 + w1*X(矩阵乘法实现批量计算)
# - 预测误差:X_b.dot(theta) - y(每个样本的预测值与真实值的差)
# - 梯度公式:(1/m) * X_b.T.dot(预测误差) (m是样本数,这里代码省略了1/m,可通过学习率补偿)
gradients = X_b.T.dot(X_b.dot(theta) - y)
# 应用梯度下降更新规则:参数向“梯度的反方向”更新(最小化损失函数)
# 公式:theta_new = theta_old - 学习率 * 梯度
theta = theta - learning_rate * gradients
# 打印最终学习到的参数theta
# 理想情况下,theta会接近真实值 [4, 3](受噪声影响会有轻微波动)
print(theta)
【机器学习】案例2.1——numpy实现全量梯度下降
最新推荐文章于 2026-01-05 11:47:06 发布
1302

被折叠的 条评论
为什么被折叠?



