0%

最小二乘法:200年不过时的"穿糖葫芦"智慧

最小二乘法:200年不过时的”穿糖葫芦”智慧

1801年,一个24岁的年轻人仅用100小时的手算,就预测出了一颗刚发现又丢失的行星位置。天文学家将望远镜对准他指出的方向——那颗行星果然在那里!这个年轻人就是高斯,他用的方法叫做”最小二乘法”。

引言:从”失踪”的行星说起

1801年1月1日,意大利天文学家皮亚齐发现了一颗新行星谷神星。这是人类发现的第一颗小行星,全世界的天文学家和数学家都为之兴奋。

然而,兴奋只持续了40天。由于谷神星运行到太阳附近,天文学家失去了它的追踪。如果找不到它的轨道,这颗刚发现的行星可能永远消失。

就在这时,一位24岁的年轻人站了出来。他花了整整100个小时,完全靠手算,竟然准确预测出了谷神星的位置。当天文学家将望远镜对准他指出的方向时,谷神星果然在那里!

这个年轻人就是卡尔·弗里德里希·高斯,数学史上最强的天才之一。他用的方法,就是我们今天要讲的最小二乘法(Method of Least Squares)。

“这是统计学历史上接受最快的一项技术,从发表到成为标准工具只 ——用了十年。” 历史学家斯蒂格勒

第一章:准备工作——三把”小钥匙”

在正式介绍最小二乘法之前,我们需要先准备好三把”小钥匙”。

1.1 均值——“平均水平”

想象你是班长,要汇报全班同学的数学成绩。你会把所有同学的分数加起来,再除以人数。这就是均值(Mean)

\[\bar{x} = \frac{x_1 + x_2 + \cdots + x_n}{n}\]

这是我们衡量”平均水平”最直觉的方式。

1.2 方差——“离散程度”

但是,光知道平均值够不够?想象两种情况: - 班级A:所有人都是80分 - 班级B:有人100分,有人60分,平均也是80分

两个班的平均水平相同,但”波动”完全不同。怎么描述这种差异?

方差(Variance)登场了:

\[s^2 = \frac{(x_1 - \bar{x})^2 + (x_2 - \bar{x})^2 + \cdots + (x_n - \bar{x})^2}{n}\]

为什么要平方?因为差距有正有负(有的高于均值,有的低于均值),直接相加会互相抵消。平方让所有”代价”都变成正的,而且越远的点”惩罚”越重。

1.3 坐标系——数据的”家”

最后,我们把数据画在二维平面上: - X轴(横轴):输入变量,比如”学习时间” - Y轴(纵轴):输出变量,比如”考试成绩”

每个同学的学习时间和成绩,就是平面上的一个点。这就是散点图


第二章:直观理解——穿糖葫芦的比喻

好,预备知识讲完了。现在让我们正式进入主题。

2.1 问题:怎么把”糖葫芦”串起来?

想象你有一串散乱的糖葫芦(数据点),你要用一根竹签(直线)把它们串起来。

问题来了:竹签应该怎么摆,才能让这串糖葫芦整体上最”整齐”?

这里的”整齐”可以有很多理解方式。最小二乘法选择了一种非常直观的理解:

找到一条直线,让所有数据点到这条直线的距离平方和最小

2.2 为什么要”平方”?

你可能会问:为什么要平方?不能直接相加距离吗?

答案是:不能!

因为距离有正有负。想象糖葫芦在竹签上方,距离为正;在竹签下方,距离为负。如果直接相加,正负抵消,可能得到一个很小的数,但实际上数据点离直线很远。

糖葫芦比喻

平方有两个好处: 1. 都是正的:平方后,负距离也变成正的 2. 惩罚更重:-3的距离平方后是9,-1的距离平方后是1。离得越远,“惩罚”越重

这就是最小二乘法中”最小”和”二乘”(平方)的含义: - 二乘:把距离平方 - 最小:让平方和最小


第三章:手把手推导——跟数据较真

光说不练假把式。让我们用一个具体例子,亲手算一遍最小二乘法。

3.1 准备数据

假设我们调查了5位同学的学习时间和考试成绩:

同学 学习时间 X (小时) 成绩 Y (分)
A 1 2
B 2 4
C 3 5
D 4 4
E 5 5

我们的目标:找到一条直线 Y = a + bX,能最好地描述这个关系。

其中: - b 是斜率(每多学1小时,成绩提高多少分) - a 是截距(不学习时,大概能得多少分)

3.2 第一步:计算均值

先算出 X 和 Y 的平均值:

\[X̄ = \frac{1+2+3+4+5}{5} = 3\]

\[Ȳ = \frac{2+4+5+4+5}{5} = 4\]

3.3 第二步:计算斜率 b

这是最关键的一步:

\[b = \frac{\sum(x_i - X̄)(y_i - Ȳ)}{\sum(x_i - X̄)^2}\]

让我们一步步算:

分子部分(每个点的 x 偏差 × y 偏差): - (1-3)(2-4) = (-2)(-2) = 4 - (2-3)(4-4) = (-1)(0) = 0 - (3-3)(5-4) = (0)(1) = 0 - (4-3)(4-4) = (1)(0) = 0 - (5-3)(5-4) = (2)(1) = 2

分子 = 4 + 0 + 0 + 0 + 2 = 6

分母部分(每个点的 x 偏差平方): - (1-3)² = 4 - (2-3)² = 1 - (3-3)² = 0 - (4-3)² = 1 - (5-3)² = 4

分母 = 4 + 1 + 0 + 1 + 4 = 10

\[b = \frac{6}{10} = 0.6\]

解读:每多学1小时,成绩提高0.6分。

3.4 第三步:计算截距 a

\[a = Ȳ - b \cdot X̄ = 4 - 0.6 \times 3 = 4 - 1.8 = 2.2\]

3.5 最终结果

Y = 2.2 + 0.6X

这就是我们的最佳拟合直线

3.6 验证一下

学习时间 X 实际成绩 Y 预测成绩 Ŷ = 2.2 + 0.6X 误差
1 2 2.8 -0.8
2 4 3.4 0.6
3 5 4.0 1.0
4 4 4.6 -0.6
5 5 5.2 -0.2

所有误差的平方和 = (-0.8)² + 0.6² + 1.0² + (-0.6)² + (-0.2)² = 0.64 + 0.36 + 1.00 + 0.36 + 0.04 = 2.4

可以证明,这个结果已经是”误差平方和最小”的了!


第四章:几何视角——正交投影的秘密

如果你已经学过一点线性代数,让我带你看看最小二乘法更深层的含义。

4.1 从向量空间的角度

想象每个数据点是一个高维空间中的向量。我们的任务是找到一个”最接近”这些数据点的直线(子空间)。

关键洞察:最小二乘法要做的,就是把原始数据点投影到这条直线上,使得投影点与原始点的距离平方和最小。

4.2 什么是正交投影?

想象一盏灯垂直照向地面(正交),你的影子就是你的正交投影。

在最小二乘法中:

当投影完成时,误差向量(原始点 - 投影点)与直线垂直

这就是”正交投影”的含义——误差与拟合线正交。

4.3 代数表达

用数学语言说,最小二乘法的正规方程是:

\[X^T(X\beta - y) = 0\]

这个方程在说:残差与每个自变量都正交

这意味着: - 拟合直线已经尽可能地”靠近”所有数据点 - 没有办法通过旋转直线来减小误差了

最小二乘法 ≈ 在子空间中寻找最近点 ≈ 正交投影

4.4 这个视角为什么重要?

  1. 它揭示了最小二乘法的几何本质
  2. 它可以自然地推广到多元回归(多个自变量)
  3. 它与线性代数中的”最佳近似”问题完全等价
  4. 它让我们理解,为什么某些情况下最小二乘法会”失效”(共线性)

第五章:历史故事——高斯 vs 勒让德

现在让我们聊聊最小二乘法的”黑历史”。

5.1 勒让德的公开发表

1805年,法国数学家勒让德在附录中首次发表了最小二乘法。他描述了如何用这个方法拟合直线到观测数据中。

他的方法简洁明了,迅速被天文学家和测量学家采用。

5.2 高斯的”声称”

4年后的1809年,高斯出版了《天体运动理论》。在这本著作中,他声称自己早在1795年(当时只有18岁!)就发现了这个方法。

高斯不仅使用了最小二乘法,还给出了更深刻的数学推导——包括正态分布与最小二乘法的联系。

5.3 谁是”真正”的发明者?

历史学家争论了几百年。根据现有证据:

  • 高斯很可能确实更早发现,但没有公开发表
  • 勒让德是第一个公开发表的人
  • 勒让德的推导是纯代数的,高斯的推导更深入,连接了最小二乘法和概率论

最终,两人都被公认为”发明者”。这场争论类似于牛顿和莱布尼茨关于微积分的争论——有时伟大的思想会同时被多人发现。

有趣的是,高斯本人后来承认,他当年觉得这个方法”太显然了”,不值得专门发表……


第六章:实际应用——你身边的最小二乘法

最小二乘法看似简单,却是现代科技的重要基石。

6.1 天气预报

气象学家用最小二乘法建立气温、气压、湿度与天气变化的关系模型。你看到的”明天降水概率”,背后可能有最小二乘法的贡献。

6.2 金融分析

  • 股票价格与市场指数的关系
  • 利率与通胀的关系
  • 公司财务指标与股价的关系

6.3 医学研究

  • 药物剂量与疗效的关系
  • 年龄、性别、体重与血压的关系
  • 吸烟时间与肺功能的关系

6.4 机器学习

线性回归是机器学习中最基础的算法,而最小二乘法就是线性回归的核心。

无论是你手机上的推荐系统,还是GPT这样的大语言模型,在它们的底层,都有着最小二乘法的影子。

可以毫不夸张地说:你身边几乎所有”根据过去数据预测未来”的场景,背后都可能有最小二乘法的身影。


第七章:Python实践——动手试试

让我们用Python来实际运行一下最小二乘法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import numpy as np
import matplotlib.pyplot as plt

# 数据:学习时间 vs 考试成绩
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 5, 4, 5])

# 方法1:直接用numpy的polyfit (一次多项式 = 直线)
b, a = np.polyfit(x, y, 1)
print(f"使用 polyfit: Y = {a:.1f} + {b:.1f}X")

# 方法2:手动实现公式
x_mean = np.mean(x)
y_mean = np.mean(y)
b_manual = np.sum((x - x_mean) * (y - y_mean)) / np.sum((x - x_mean)**2)
a_manual = y_mean - b_manual * x_mean
print(f"手动计算: Y = {a_manual:.1f} + {b_manual:.1f}X")

# 预测:学习6小时
predicted = a + b * 6
print(f"预测学习6小时的成绩: {predicted:.1f}")

# 可视化
plt.figure(figsize=(8, 6))
plt.scatter(x, y, color='red', s=100, label='实际数据', zorder=5)
plt.plot(x, a + b*x, color='blue', linewidth=2, label='拟合直线')
plt.scatter([6], [predicted], color='green', s=100, marker='*',
label=f'预测 (6小时, {predicted:.1f}分)', zorder=5)
plt.xlabel('学习时间 (小时)', fontsize=12)
plt.ylabel('考试成绩 (分)', fontsize=12)
plt.title('最小二乘法线性回归示例', fontsize=14)
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()

运行结果:

1
2
3
使用 polyfit: Y = 2.2 + 0.6X
手动计算: Y = 2.2 + 0.6X
预测学习6小时的成绩: 5.8

完美!和我们的手工计算一致。


总结:为什么200年后它仍重要?

1805年发明至今,最小二乘法已经220岁了。

为什么它仍是统计学最重要的方法?

  1. 简单高效:有闭合解,计算速度快
  2. 理论优美:在正态分布假设下,它是最优的(最小方差无偏估计)
  3. 承上启下:它是理解所有复杂回归模型的基础
  4. 广泛应用:从航天到医学,从金融到AI,无所不在

高斯在18岁时发明的这个”小工具”,至今仍是每个数据科学家、工程师、研究人员的必备武器。

下次当你看到天气预报、股票预测、或者任何”预测未来”的应用时,请记住——它们的背后,可能都藏着200年前那个”穿糖葫芦”的智慧。


参考来源:高斯与勒让德的原始论文、Statistics by Jim、Stigler (1981) “Gauss and the Invention of Least Squares”