← 返回Book 3目录
第24章

鸡兔同笼2

Linear Systems II

线性回归与最小二乘法:从无截距到有截距。

📚 本章导览

本章在上一章线性方程组的基础上,深入探讨线性回归和最小二乘法。通过鸡兔同笼问题的扩展,介绍从无截距到有截距的回归模型,以及矩阵求解和统计视角的理解。

24.1 拟合,无截距
y = ax模型与最小二乘法
24.2 回归,有截距
y = ax + b模型与参数求解
24.3 矩阵运算求解
最小二乘法的矩阵形式
24.4 统计视角
协方差、相关系数与回归

24.1 拟合,无截距

比例模型 y = ax

在某些情况下,我们假设变量之间存在比例关系,即通过原点的直线。对于鸡和兔子的数量, 我们可以尝试用最简单的模型:

ypred = a · x

其中 x 是鸡的数量,y 是兔子的数量,a 是待求的比例系数

最小二乘法目标

找到最佳的 a 值,使得预测值与实际值之间的误差平方和(SSE)最小:

SSE(a) = Σ(yi - a·xi)²

求解过程

步骤1:构建误差函数
f(a) = 65428a² - 72228a + 20179
步骤2:求一阶导数
df/da = 130856a - 72228
步骤3:令导数为零,求解
130856a - 72228 = 0
a* ≈ 0.5520

💡 模型特点

  • • 过原点:模型假设当鸡的数量为0时,兔子数量也为0
  • • 一个参数:只需要确定斜率 a
  • • 简单快速:计算量小,适合比例关系明确的场景
  • • 局限性:无法处理有截距的情况

24.2 回归,有截距

线性模型 y = ax + b

更一般的情况下,我们需要考虑截距项,即直线不一定通过原点:

ypred = a · x + b

a 是斜率,b 是截距(y轴截距)

两参数优化问题

现在需要同时找到最优的 a 和 b,使得误差平方和最小:

SSE(a,b) = Σ(yi - (a·xi + b))²

偏导数求解

误差函数
f(a,b) = 65428a² + 1784ab - 72228a + 14b² - 1014b + 20179
对 a 求偏导
∂f/∂a = 130856a + 1784b - 72228 = 0
对 b 求偏导
∂f/∂b = 1784a + 28b - 1014 = 0
最优解
a* ≈ 0.4434
斜率
b* ≈ 7.9641
截距
最小误差:SSE ≈ 128.67

🎯 模型改进

  • • 更灵活:可以拟合不通过原点的数据
  • • 误差更小:相比无截距模型,SSE显著降低
  • • 实际意义:截距b表示基础数量或偏移
  • • 广泛应用:线性回归的标准形式

24.3 矩阵运算求解回归参数

最小二乘法的矩阵形式

使用矩阵运算可以更简洁地表示和求解线性回归问题。

比例模型:y = ax

矩阵形式
y = Xa
其中 X 是鸡数量的列向量
最小二乘解
a* = (XTX)-1XTy

线性模型:y = ax + b

增广矩阵
X = [1, x]
第一列全为1(截距项),第二列为x(斜率项)
参数向量
[b, a]T = (XTX)-1XTy

NumPy实现

# 比例模型
x = num_chickens[:, None]
y = num_rabbits[:, None]
a_star = np.linalg.inv(x.T @ x) @ x.T @ y
# 线性模型
X = np.hstack((np.ones_like(x), x))
sol = np.linalg.inv(X.T @ X) @ X.T @ y
b_star = sol[0] # 截距
a_star = sol[1] # 斜率

⚡ 矩阵方法的优势

  • • 简洁表达:统一的数学形式
  • • 高效计算:利用优化的线性代数库
  • • 易于扩展:可以轻松处理多元回归
  • • 数值稳定:现代库提供稳定的求解算法

24.4 统计视角下的回归

统计量与回归系数

从统计学角度,线性回归的参数可以用协方差和相关系数表示。

关键统计量

标准差
σX, σY
相关系数
ρXY
均值
x̄, ȳ
协方差
Cov(X,Y)

回归系数公式

斜率
a = ρXY · (σY / σX)
或 a = Cov(X,Y) / Var(X)
截距
b = ȳ - a · x̄
回归线必过均值点 (x̄, ȳ)

与sklearn的对比

统计公式计算
σ_X = num_chickens.std(ddof=1)
σ_Y = num_rabbits.std(ddof=1)
ρ_XY = np.corrcoef(x, y)[1][0]
a = ρ_XY * σ_Y / σ_X
b = ȳ - a * x̄
sklearn实现
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(x, y)
a = model.coef_[0]
b = model.intercept_
结果一致
a ≈ 0.4434, b ≈ 7.9641

📊 统计视角的意义

  • • 直观理解:通过相关性理解变量关系
  • • 标准化:相关系数消除了量纲影响
  • • 几何意义:回归线过均值点
  • • 统计推断:便于进行假设检验和置信区间估计

章节总结

🎯 核心概念

  • •线性回归:拟合数据的最佳直线
  • •最小二乘法:最小化误差平方和
  • •无截距vs有截距:模型复杂度权衡
  • •矩阵求解:统一的数学框架
  • •统计视角:协方差与相关性

📐 关键公式

无截距模型
a* = (XTX)-1XTy
有截距模型
[b,a]T = (XTX)-1XTy
统计公式
a = ρ·σY/σX
b = ȳ - a·x̄

🔍 几何直观

  • •误差平方和对应点到直线的垂直距离平方和
  • •最优解是误差函数的极值点
  • •回归线总是经过数据的均值点
  • •等高线图展示误差在参数空间的分布

💻 实际应用

  • •预测模型:基于历史数据预测未来
  • •趋势分析:发现变量之间的线性关系
  • •机器学习:监督学习的基础算法
  • •科学研究:实验数据拟合与分析

🚀 从Ch23到Ch24的进展

Ch23介绍了线性方程组的精确解,Ch24则处理过定方程组(数据点多于未知数)的情况, 通过最小二乘法找到最佳近似解。这是从代数问题到统计问题的转变, 也是机器学习中从求解到优化的重要思想转变。矩阵方法提供了统一的数学框架, 而统计视角则给出了直观的几何和概率解释。