🌄 回到梯度之谷,这次为了建模而战!
熟悉的梯度之谷再次出现在三人面前,只不过这次,他们不再是初学者,而是带着线性回归的任务而来。
“这里的风景我记得!”分析师兴奋地说,“上次我们在这儿练了最速下降和牛顿法。”
派森先生笑着点头:“这次你不是为了找极小值而来,而是要训练一个模型!”
马斯小姐缓缓举起了刻着公式的水晶:
L(w)=1n∑i=1n(yi−y^i)2=1n∥Xw−y∥2
“这就是我们要最小化的损失函数,”她解释道,“平方误差(MSE)越小,预测就越准。”
🧠 梯度下降法优化线性回归模型
派森先生在沙地上写下基本步骤:
迭代法核心:
初始化权重 w(随机 or 零)
计算损失函数对 w 的梯度
更新参数:
w=w−η⋅∇wL(w)直到收敛 or 达到迭代上限
“其中 η 是学习率,它控制我们每一步‘走多远’。”
🔢 梯度公式推导回顾
马斯小姐解释:
目标函数是:
L(w)=1n(Xw−y)T(Xw−y)
它对 w 的梯度是:
∇wL(w)=2nXT(Xw−y)
“这就是我们每次要‘朝反方向走’的方向。”
🧪 Python 实战:手写梯度下降优化线性回归
派森先生递上了练习用的“咒语卷轴”👇
import numpy as np
import matplotlib.pyplot as plt
# 模拟数据:y = 3x + 2 + 噪声
np.random.seed(42)
X = 2 * np.random.rand(100, 1)
y = 3 * X[:, 0] + 2 + np.random.randn(100) * 0.3
# 添加偏置项
X_b = np.c_[np.ones((100, 1)), X] # shape: (100, 2)
# 初始化参数
w = np.zeros(2) # shape: (2,)
learning_rate = 0.1
n_epochs = 1000
m = len(y)
loss_history = []
# 梯度下降迭代
for epoch in range(n_epochs):
gradients = (2/m) * X_b.T @ (X_b @ w - y)
w -= learning_rate * gradients
loss = np.mean((X_b @ w - y)**2)
loss_history.append(loss)
print("训练后权重 w =", w)
# 可视化结果
plt.scatter(X, y, label='数据点')
plt.plot(X, X_b @ w, color='red', label='梯度下降预测')
plt.title("线性回归:梯度下降法")
plt.legend()
plt.grid(True)
plt.show()
# 可视化损失函数下降
plt.plot(loss_history)
plt.title("损失函数变化曲线")
plt.xlabel("迭代次数")
plt.ylabel("MSE")
plt.grid(True)
plt.show()
🧩 关键点总结
用 X_b.T @ (X_b @ w - y) 计算梯度
每次更新 w,让模型更接近真实值
损失下降曲线帮助判断收敛情况
派森先生提醒:
“你可以尝试不同的学习率,看看什么是过大导致震荡,什么是太小训练太慢。”
马斯小姐补充:
“还可以尝试提前停止(early stopping)、批量更新、甚至引入动量……那是更高级的魔法,我们之后会遇到。”
🧑💻 练习任务:训练你自己的模型
🎯 任务一:更换训练数据(如多特征),手写梯度更新
🎯 任务二:绘制学习率 vs 收敛速度的图表,观察不同学习率下模型表现
🎯 任务三:尝试对 scikit-learn 的 SGDRegressor 使用不同参数对比效果:
from sklearn.linear_model import SGDRegressor
sgd = SGDRegressor(max_iter=1000, learning_rate='constant', eta0=0.1)
sgd.fit(X, y)
print("SGD 模型权重:", sgd.coef_, sgd.intercept_)
📚 本章小结
理解了线性回归模型的损失函数形式
推导了目标函数的梯度表达式
从零实现了梯度下降优化过程
观察了学习曲线、了解了学习率影响
这不仅是一堂数学课,更是一次机器学习模型的诞生过程!
🧭 下集预告:正则化与过拟合的迷雾
远方飘来一阵迷雾,塔上刻着两个单词:Ridge 与 Lasso。
马斯小姐皱起眉头:“前方将进入模型泛化与过拟合的领域——正则化之境。”
派森先生点头:“下集,我们将学习如何在模型中引入约束,惩罚过度拟合,学会优雅地控制模型复杂度。”
分析师握紧笔记本:“我已经准备好面对 L2 和 L1 惩罚项的考验了!”



















暂无评论内容