1. 最小二乘法基础概念
最小二乘法(Least Squares Method)是数据分析中最基础也最重要的数学工具之一。作为一名经常处理实验数据的工程师,我发现这个方法几乎每周都会用到。它的核心思想非常直观:找到一组参数,使得模型预测值与真实观测值之间的误差平方和最小。
1.1 为什么需要最小二乘法
在实际工作中,我们经常会遇到这样的场景:通过实验测量得到一组(x,y)数据点,想要找出x和y之间的数学关系。比如:
- 测量弹簧伸长量与拉力关系
- 记录物体运动时间与位移数据
- 分析广告投入与销售额的关联
这些数据点往往不会完美地落在一条直线上,因为测量总有误差。最小二乘法就是帮我们找到"最合适"的那条直线,使它能最好地代表数据的整体趋势。
1.2 误差的数学表达
假设我们有n个数据点(x₁,y₁), (x₂,y₂), ..., (xₙ,yₙ),想要拟合直线y = kx + b。对于每个xᵢ,预测值为ŷᵢ = kxᵢ + b,真实值为yᵢ。
误差(残差)定义为:eᵢ = yᵢ - ŷᵢ
最小二乘法的目标是最小化所有误差的平方和:
S = Σ(yᵢ - kxᵢ - b)² (i从1到n)
提示:使用平方而不是绝对值,是因为平方函数处处可导,便于数学处理,同时会放大较大误差的影响。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 公式推导与理解
2.1 斜率k和截距b的推导
为了找到使S最小的k和b,我们需要对S分别关于k和b求偏导,并令导数为0:
∂S/∂k = -2Σxᵢ(yᵢ - kxᵢ - b) = 0
∂S/∂b = -2Σ(yᵢ - kxᵢ - b) = 0
解这组方程可以得到:
k = (nΣxᵢyᵢ - ΣxᵢΣyᵢ) / (nΣxᵢ² - (Σxᵢ)²)
b = (Σxᵢ²Σyᵢ - ΣxᵢΣxᵢyᵢ) / (nΣxᵢ² - (Σxᵢ)²)
这个推导过程展示了最小二乘法的数学严谨性。我第一次推导时花了整整一晚上,但理解后就能灵活应用在各种场景了。
2.2 计算步骤详解
让我们用一个具体例子来说明计算过程。假设有以下5个数据点:
(2, 2.2), (3, 3.8), (4, 5.5), (5, 6.5), (6, 7.0)
首先计算所需的中间量:
n = 5
Σx = 2+3+4+5+6 = 20
Σy = 2.2+3.8+5.5+6.5+7.0 = 25.0
Σx² = 4+9+16+25+36 = 90
Σxy = 4.4+11.4+22.0+32.5+42.0 = 112.3
代入公式:
k = (5×112.3 - 20×25.0)/(5×90 - 20²) = (561.5-500)/(450-400) = 61.5/50 = 1.23
b = (90×25.0 - 20×112.3)/(5×90 - 20²) = (2250-2246)/50 = 4/50 = 0.08
所以拟合直线为:y = 1.23x + 0.08
3. Python实现与可视化
3.1 基础实现
在Python中,我们可以用NumPy高效地实现最小二乘法:
python复制import numpy as np
points = [(2, 2.2), (3, 3.8), (4, 5.5), (5, 6.5), (6, 7.0)]
x = np.array([p[0] for p in points])
y = np.array([p[1] for p in points])
# 计算各项和
n = len(x)
sum_x = np.sum(x)
sum_y = np.sum(y)
sum_x2 = np.sum(x**2)
sum_xy = np.sum(x * y)
# 计算k和b
denominator = n * sum_x2 - sum_x**2
k = (n * sum_xy - sum_x * sum_y) / denominator
b = (sum_x2 * sum
