配音

Course 1:线性回归与梯度下降

课程简介

从单变量回归到多变量回归,理解代价函数、梯度下降与特征缩放。

🎬 本课程视频:Machine Learning Specialization (2022) — 新版机器学习


一、线性回归:从单变量到多变量

线性回归是机器学习中最基础的监督学习算法。它的目标是学习一个线性函数来拟合训练数据,使得模型对新输入的预测尽可能准确。

1.1 单变量线性回归

在最简单的单变量场景中,我们有一个输入特征 x 和一个输出值 y。模型的形式为:

$$f_{w,b}(x) = wx + b$$

其中 w 是权重(斜率),b 是偏置(截距)。模型的参数 θ = (w, b) 需要通过训练数据学习得到。

损失函数使用均方误差(MSE):

$$J(w,b) = \frac{1}{2m} \sum_{i=1}^{m} (f_{w,b}(x^{(i)}) - y^{(i)})^2$$

前面的 1/2 系数是为了后续求导时抵消平方项的系数,使梯度表达式更简洁。

1.2 多变量线性回归

实际应用中,我们通常有多个特征。例如预测房价时,可能用到面积、卧室数量、楼层、房龄等多个特征。多变量线性回归的模型为:

$$f_{w,b}(x) = w_1 x_1 + w_2 x_2 + ... + w_n x_n + b = w \cdot x + b$$

使用向量化的形式可以简洁地表达:

$$f_{w,b}(X) = Xw + b$$

其中 X 是 m×n 矩阵(m 个样本,n 个特征),w 是 n 维权重向量。

二、梯度下降

2.1 算法原理

梯度下降是机器学习中最核心的优化算法。它的目标是找到使损失函数 J(w,b) 最小的参数值。

算法的核心思想是:在当前位置计算损失函数的梯度(即一阶导数),然后沿着梯度的反方向迈出一步。重复这个过程直到收敛。

$$egin{align}
w_j &:= w_j - \alpha \frac{\partial}{\partial w_j} J(w,b) \
b &:= b - \alpha \frac{\partial}{\partial b} J(w,b)
\end{align
}$$

其中 α 是学习率,控制每次更新的步长。

2.2 学习率的选择

学习率是梯度下降中最关键的超参数:

实践经验:
- 从 α = 0.01 开始尝试
- 以约 3 倍为间隔尝试不同值:0.001, 0.003, 0.01, 0.03, 0.1, 0.3, 1.0
- 观察损失曲线的下降情况来调整

2.3 梯度下降的变体

批梯度下降(Batch GD):每次迭代使用全部训练样本计算梯度。对于大规模数据集,一次迭代的计算量太大。

随机梯度下降(SGD):每次迭代只使用一个随机样本计算梯度。梯度方向噪声大,但计算快,且有机会跳出局部极小值。

小批量梯度下降(Mini-batch GD):折中方案——每次使用 32-512 个样本。兼顾了计算效率和梯度质量。

def gradient_descent(X, y, w, b, alpha, num_iters):
    m = X.shape[0]
    for i in range(num_iters):
        # 预测
        y_pred = np.dot(X, w) + b
        # 计算梯度
        dw = (1/m) * np.dot(X.T, (y_pred - y))
        db = (1/m) * np.sum(y_pred - y)
        # 更新参数
        w = w - alpha * dw
        b = b - alpha * db
    return w, b

三、特征缩放

3.1 为什么需要特征缩放

当不同特征的数值范围相差很大时(如房价预测中,面积 1000-3000 平方英尺,卧室数 1-5 个),梯度下降的收敛会变得非常缓慢。

原因在于:数值范围大的特征对应的权重 w 的梯度也大,数值范围小的特征的梯度也小。这会导致等高线图的形状拉长,梯度下降在窄长山谷中来回震荡。

3.2 常用缩放方法

归一化(Min-Max Scaling)
$$x_{\text{norm}} = \frac{x - x_{\min}}{x_{\max} - x_{\min}}$$

将数据缩放到 [0, 1] 区间。适用于数据分布均匀的情况。

标准化(Z-score Normalization)
$$x_{\text{std}} = \frac{x - \mu}{\sigma}$$

将数据变换为均值为 0、标准差为 1 的分布。适用于数据存在异常值的情况。

3.3 何时应用特征缩放

四、正规方程(选读)

对于线性回归,可以推导出闭式解。令 X 为设计矩阵(包含偏置项),y 为目标向量:

$$w = (X^T X)^{-1} X^T y$$

优点:不需要选择学习率,不需要迭代
缺点:当 n > 10000 时,计算 (X^T X)^{-1} 复杂度为 O(n³),非常慢

五、实战案例:波士顿房价预测

import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split

# 加载数据
# X: 特征矩阵, y: 目标值
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 特征缩放
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# 训练
w = np.zeros(X_train.shape[1])
b = 0.0
alpha = 0.01
num_iters = 1000

w, b, J_history = gradient_descent(X_train, y_train, w, b, alpha, num_iters)

# 评估
y_pred = np.dot(X_test, w) + b
mse = np.mean((y_pred - y_test) ** 2)
print(f"Test MSE: {mse:.4f}")

这个实战案例展示了从数据预处理到模型训练再到评估的完整流程。特征缩放、学习率选择、损失监控是线性回归实践中的关键环节。

延伸阅读