本文详细介绍了如何使用Python编程语言来实现最小二乘法,包括线性回归模型的应用和代码实例,适合初学者入门学习。
最小二乘法(Least Square Method)是一种广泛应用的数学方法,在统计学和数据分析领域具有悠久的历史(由法国数学家马里·勒让德于1806年提出)。该方法通过最小化预测值与实际观测值之间的误差平方和来寻找最佳拟合模型。这种方法至今仍然是线性回归及曲线拟合的核心工具。
在应用最小二乘法时,我们通常有一个数据集 (x, y),其中 x 是自变量,y 是因变量。我们的目标是找到一个函数 h(x) 来尽可能接近这些数据点。为了衡量这种拟合程度,引入了“残差”的概念——每个数据点的实际值 y 与拟合函数 h(x) 的预测值之间的差异。
在实践中,有三种常见的范数用于度量残差:
1. ∞-范数(最大绝对误差):所有数据点的残差绝对值中的最大值。
2. 1-范数(绝对误差和):所有数据点的残差绝对值总和。
3. 2-范数(平方误差和):所有数据点的残差平方之和,也就是误差平方和。
其中,由于计算简单且便于进行微分运算,2-范数是最常用的评估标准。最小二乘法的目标就是找到一个函数 h(x) ,使得它的残差的 2-范数达到最小值:
式中,h(x) 是拟合函数;w 是模型参数;N 表示数据点的数量;x_i 和 y_i 分别是第 i 个数据点的自变量和因变量。
当拟合函数为线性形式时(如 h(x) = w1 * x + w0),可以通过对损失函数求偏导数并令其等于零来解决最小二乘法问题。通常使用的损失函数是平方损失函数,即 Q(w),其中 Q(w) 是风险函数。
在 Python 中,可以使用 scipy 库中的 `leastsq` 函数实现最小二乘法的计算。以下是一个简单的例子:
```python
import numpy as np
from scipy.optimize import leastsq
def real_func(x):
return np.sin(2 * np.pi * x)
def fit_func(p, x):
f = np.poly1d(p)
return f(x)
def residuals_func(p, y, x):
return fit_func(p, x) - y
x = np.linspace(0, 1, 9)
y0 = real_func(x)
y1 = [np.random.normal(0, 0.1) + y for y in y0]
p_init = np.random.randn(n)
plsq = leastsq(residuals_func, p_init, args=(y1, x))
print(Fitting Parameters:, plsq[0])
```
这段代码首先定义了目标函数、拟合函数和残差函数,然后生成带噪声的数据。最后使用 `leastsq` 函数找到多项式的参数,并输出结果。
最小二乘法是一种有效的数据逼近方法,在构建各种线性和非线性模型时被广泛应用。通过 Python 的科学计算库可以方便地实现这一方法,进行数据分析和拟合。