5 多变量线性回归
5.1 多特征情况下的模型构建
此前我们主要研究的是单变量线性回归问题,现在将讨论扩展到包含多个输入特征的情形。在多变量场景中,使用 \( x_j \) 表示第 \( j \) 个特征,\( n \) 代表总的特征数量,而 \( m \) 则表示样本总数。对于第 \( i \) 个样本,其特征向量记为 \( \vec{x}^{(i)} \),其中第 \( j \) 个特征的具体取值为 \( x_j^{(i)} \)。
此时,模型中的参数 \( w \) 不再是单一数值,而是与输入特征维度一致的向量 \( \vec{w} \),偏置项 \( b \) 仍为标量。因此,预测函数可表示为:
\[
f_{\vec{w}, b}(\vec{x}) = \vec{w} \cdot \vec{x} + b = \sum_{j=1}^n w_j x_j + b
\]
该形式被称为多元线性回归模型。
5.2 向量化计算优化
为了提升代码执行效率,推荐采用向量化编程方式替代显式循环操作。以下是常用的 NumPy 函数(假设已导入
import numpy as np):
- np.array():将 Python 列表或元组转换成 NumPy 数组(ndarray 类型)
- np.zeros(shape):生成指定形状的全零数组
- np.ones(shape):生成指定形状的全一数组
- array.reshape(shape):返回重塑后的新数组,不改变原数组结构
- array.flatten():将多维数组展平为一维数组
- np.dot(a, b) 或 a @ b:用于矩阵乘法或向量点积运算
- +, -, *, /:支持数组间的逐元素加减乘除运算
- np.sqrt(a):计算数组每个元素的平方根
- np.exp(a):对数组每个元素求自然指数 \( e^x \)
- np.log(a):计算数组每个元素的自然对数
- np.sum(a, axis=None):沿指定轴或全部元素求和
- np.mean(a, axis=None):沿指定轴或整体计算均值
- np.min(a, axis=None):获取最小值
- np.max(a, axis=None):获取最大值
- np.std(a, axis=None):计算标准差
通过合理运用这些函数,可以显著加快数据处理速度。
5.3 多元回归中的梯度下降法
多变量情形下的梯度下降算法原理与单变量类似,核心思想依然是沿着成本函数梯度方向逐步调整参数以逼近最优解。

利用向量化技术,能够实现并行化计算,从而大幅提升训练效率。除了迭代式的梯度下降方法外,还存在一种直接求解参数的方法——正规方程(Normal Equation)。
正规方程简介:
这是一种解析解法,通过矩阵运算一步得出使成本函数(通常基于最小二乘准则)达到最小的参数 \( \theta \)。其基本思路是令损失函数关于各参数的偏导数为零,进而解出最优参数组合。
实际应用中,通常借助高级线性代数库来完成求解过程。
优点:
无需迭代,求解迅速。
缺点:
涉及矩阵求逆操作,当特征数量 \( n \) 极大时,计算复杂度高且内存消耗大;此外,此方法仅适用于线性回归,难以推广至逻辑回归、
神经网络等更复杂的模型。
6 线性回归实践建议
6.1 特征缩放(Feature Scaling)
不同特征的数值范围可能存在较大差异,分布也不均衡,这会影响梯度下降的收敛速度和稳定性。因此,在进行优化前应先进行特征缩放。常见的三种方法如下:
- Min-max 归一化:
将特征值映射到 [0,1] 区间:
\[
x_{i\_scaled} = \frac{x_i}{x_{max}}
\]
- 均值归一化(Mean Normalization):
首先计算特征平均值:
\[
\mu_i = \text{mean}(x_i)
\]
然后进行标准化:
\[
x_{i\_scaled} = \frac{x_i - \mu_i}{x_{max} - x_{min}}
\]
- Z-score 标准化(标准分数):
在均值基础上进一步考虑标准差:
\[
\sigma_i = \sqrt{\frac{1}{N}\sum_{j=1}^{N} (x_i^{(j)} - \mu_i)^2}
\]
得到:
\[
x_{i\_scaled} = \frac{x_i - \mu_i}{\sigma_i}
\]
提示: 特征缩放的目标通常是让所有特征大致落在 [-1, 1] 范围内,并尽可能保持正负值混合,有助于加速梯度下降的收敛。
6.2 如何判断梯度下降是否收敛
在训练过程中,可通过监控成本函数随迭代次数的变化趋势来评估是否趋于收敛。若连续若干次迭代后成本函数变化极小,或曲线趋于平稳,则可认为算法已接近最优解。也可设定一个阈值,当相邻两次迭代的成本差小于该值时停止训练。
在优化算法过程中,可以通过绘制曲线图来观察模型的收敛情况。将成本函数作为纵轴,迭代次数作为横轴进行绘图。
此外,也可以设定一个极小的阈值 Epsilon(ε),当某次迭代中成本函数的下降幅度小于或等于该值时,即可判定算法已经收敛。
6.3 选择合适的学习率
为了找到最优学习率,可以绘制不同学习率下的成本函数变化曲线。尝试使用不同的学习率数值,如 0.001、0.01 和 0.1 等,观察其对收敛速度和稳定性的影响。
随后可进一步细化调整,采用更小的步长间隔,例如尝试 0.003、0.03 等值,并比较不同设置下曲线的变化趋势,从而判断哪个学习率更为合适。
6.5 多项式回归(Polynomial Regression)
多项式回归能够拟合非线性关系,适用于数据呈现曲线分布的情况。其实现方式是基于原始特征构造新的特征,这些新特征通常是原始特征的高次幂形式,比如平方项、立方项,或是算术平方根等非线性变换。
6.4 特征工程(Feature Engineering)
特征工程依赖于对问题的理解与经验直觉,通过从已有特征出发,进行转换或组合,生成更具表达能力的新特征。例如,若原始输入包含“长度”和“宽度”,则可根据实际意义构造“面积 = 长 × 宽”作为一个新的特征,以提升模型的表现力。