首页
/ Neuromatch Academy课程内容解析:多元线性回归与多项式回归

Neuromatch Academy课程内容解析:多元线性回归与多项式回归

2025-07-10 07:07:35作者:胡易黎Nicole

引言

在数据分析与建模领域,回归分析是最基础且强大的工具之一。本文基于Neuromatch Academy课程内容,深入讲解多元线性回归和多项式回归的核心概念与实现方法。我们将从简单的线性回归出发,逐步扩展到多维特征空间,最终探讨如何通过多项式回归处理非线性关系。

多元线性回归基础

模型定义

多元线性回归是简单线性回归的自然扩展,当我们的输入特征从一个扩展到多个时,模型可以表示为:

y = θ₀ + θ₁x₁ + θ₂x₂ + ... + θₙxₙ + ε

其中:

  • y是因变量(响应变量)
  • x₁到xₙ是自变量(特征/预测变量)
  • θ₀是截距项
  • θ₁到θₙ是各特征的系数
  • ε是误差项

矩阵表示

为了更简洁地表示和计算,我们通常使用矩阵形式:

y = Xθ + ε

其中:

  • y是测量值的向量(N×1)
  • X是设计矩阵(N×(n+1)),包含一列1(对应截距)和各特征值
  • θ是参数向量((n+1)×1)
  • ε是误差向量(N×1)

普通最小二乘(OLS)估计

OLS估计的目标是最小化残差平方和(MSE)。其解析解为:

θ̂ = (XᵀX)⁻¹Xᵀy

这个解可以通过对MSE函数求导并令导数为零得到。

实现多元线性回归

数据准备

我们首先生成模拟数据:

  • 设置真实参数θ = [0, -2, -3]
  • 生成40个样本点,x₁和x₂在[-2,2)区间均匀分布
  • 添加高斯噪声
# 设置随机种子保证可重复性
np.random.seed(1234)

# 参数设置
theta = [0, -2, -3]
n_samples = 40

# 生成数据
n_regressors = len(theta)
x0 = np.ones((n_samples, 1))  # 截距项
x1 = np.random.uniform(-2, 2, (n_samples, 1))
x2 = np.random.uniform(-2, 2, (n_samples, 1))
X = np.hstack((x0, x1, x2))  # 设计矩阵
noise = np.random.randn(n_samples)
y = X @ theta + noise

OLS估计实现

def ordinary_least_squares(X, y):
    """普通最小二乘估计器"""
    theta_hat = np.linalg.inv(X.T @ X) @ X.T @ y
    return theta_hat

theta_hat = ordinary_least_squares(X, y)
print(f"估计参数: {theta_hat}")

执行后应得到类似[0.14, -2.09, -3.16]的估计值,接近真实参数[0, -2, -3]。

模型评估

计算预测值和MSE:

y_hat = X @ theta_hat
mse = np.mean((y - y_hat)**2)
print(f"MSE = {mse:.2f}")

多项式回归

当数据呈现非线性关系时,多项式回归是强有力的工具。它通过将特征的高次项加入模型来捕捉非线性关系。

模型形式

d阶多项式回归模型:

y = θ₀ + θ₁x + θ₂x² + ... + θₙxⁿ + ε

这实际上是多元线性回归的特例,其中特征为x的各次幂。

设计矩阵构建

关键步骤是构建包含各次幂的设计矩阵:

def make_design_matrix(x, order):
    """构建多项式设计矩阵"""
    X = np.ones((len(x), 1))  # 截距列
    for i in range(1, order+1):
        X = np.hstack((X, x**i))
    return X

多项式回归实现

我们可以对不同阶数的多项式进行拟合比较:

max_order = 5
theta_hat = {}

for order in range(max_order + 1):
    X_design = make_design_matrix(x, order)
    theta_hat[order] = ordinary_least_squares(X_design, y)

模型比较

通过绘制不同阶数多项式的拟合曲线和计算MSE,我们可以评估模型复杂度与拟合效果的关系:

def evaluate_fits(order_list, mse_list):
    """比较不同多项式拟合的MSE"""
    plt.bar(order_list, mse_list)
    plt.title('多项式拟合比较')
    plt.xlabel('多项式阶数')
    plt.ylabel('MSE')
    plt.show()

实际应用建议

  1. 特征缩放:对于多项式回归,高次项可能导致数值不稳定,建议对特征进行标准化处理。

  2. 模型选择:高阶多项式可能过拟合,需要通过交叉验证等方法选择合适复杂度。

  3. 可视化:对于低维问题,可视化拟合曲线有助于直观理解模型表现。

  4. 正则化:当特征较多时,考虑使用岭回归或Lasso等正则化方法防止过拟合。

总结

本文详细介绍了多元线性回归和多项式回归的理论基础与Python实现。关键要点包括:

  • 多元线性回归通过设计矩阵扩展简单线性回归
  • OLS估计提供了参数的解析解
  • 多项式回归通过特征工程处理非线性关系
  • 模型复杂度与拟合效果需要平衡

这些技术构成了回归分析的基础,在实际数据分析中有广泛应用。理解这些概念对于掌握更复杂的机器学习模型至关重要。