实验一:线性回归 —— 用梯度下降拟合房价数据
第一个实验从最经典的线性回归入手。目标是理解 损失函数 与 梯度下降 的收敛过程:我构造了一组带噪声的房价-面积样本, 用 NumPy 手写批量梯度下降,观察损失值随迭代次数的下降曲线。
实验步骤
- 构造合成数据集:
y = 4.2x + 3.1 + 噪声,共 200 个样本; - 初始化权重
w与偏置b为 0,学习率取0.01; - 迭代 200 轮,每轮记录均方误差(MSE);
- 可视化损失曲线与最终拟合直线。
核心代码
# 批量梯度下降:一元线性回归
import numpy as np
X = np.random.rand(200, 1) * 10
y = 4.2 * X.squeeze() + 3.1 + np.random.randn(200) * 2
w, b = 0.0, 0.0
lr = 0.01
losses = []
for epoch in range(200):
pred = w * X.squeeze() + b
loss = np.mean((pred - y) ** 2) # MSE
losses.append(loss)
dw = np.mean(2 * (pred - y) * X.squeeze())
db = np.mean(2 * (pred - y))
w -= lr * dw
b -= lr * db
运行结果
损失函数(MSE)随迭代次数下降曲线
4.19
拟合斜率 w
3.22
拟合截距 b
≈ 4.1
最终 MSE
✅ 结论:损失值在前几十轮快速下降、随后趋于平缓,说明梯度下降正常收敛;
拟合出的 w、b 与真实参数(4.2、3.1)非常接近,噪声并未被过拟合。