一、什么是最小二乘法?
最小二乘法的目标是找到一组参数,使得线性模型的预测值与观测数据点之间的误差平方和最小化。对于简单的线性回归模型,可以表示为:
Y = β 0 + β 1 X + ϵ Y = \beta_0 + \beta_1X + \epsilon Y=β0+β1X+ϵ
其中, Y Y Y 是因变量(目标变量), X X X 是自变量(特征), β 0 \beta_0 β0 是截距, β 1 \beta_1 β1 是斜率, ϵ \epsilon ϵ 是误差项。
二、最小二乘法的原理
最小二乘法的核心思想是最小化损失函数,损失函数通常定义为残差的平方和:
L ( β 0 , β 1 ) = ∑ i = 1 n ( Y i − ( β 0 + β 1 X i ) ) 2 L(\beta_0, \beta_1) = \sum_{i=1}^{n} (Y_i - (\beta_0 + \beta_1X_i))^2 L(β0,β1)=i=1∑n(Yi−(β0+β1Xi))2
最小二乘法的关键是找到使损失函数最小化的 β 0 \beta_0 β0 和 β 1 \beta_1 β1。这可以通过求偏导数并令其等于零来实现。最终,我们得到了最佳拟合直线的公式:
Y ^ = β 0 ^ + β 1 ^ X \hat{Y} = \hat{\beta_0} + \hat{\beta_1}X Y^=β0^+β1^X
三、使用Scipy进行最小二乘法
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
# 生成随机数据
np.random.seed(0)
X = 2 * np.random.rand(100, 1)
Y = 4 + 3 * X + np.random.randn(100, 1)
# 定义线性模型
def linear_model(X, beta_0, beta_1):
return beta_0 + beta_1 * X
# 利用Scipy的curve_fit函数拟合数据
params, covariance = curve_fit(linear_model, X.ravel(), Y.ravel())
beta_0, beta_1 = params
# 绘制数据点
plt.scatter(X, Y, label='Data')
# 绘制拟合线
plt.plot(X, linear_model(X, beta_0, beta_1), color='red', linewidth=2, label='Linear Fit')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.show()
# 输出拟合参数
print("截距:", beta_0)
print("斜率:", beta_1)
通过Scipy的curve_fit
函数拟合数据并绘制拟合结果。