1. 最小二乘法目标函数

目标函数是观测值和理论值之间误差的平方和。假设有mm 个数据点,每个数据点(xi,yi)(x_i, y_i) 有一个观测值yiy_i 和一个预测值hθ(xi)h_\theta(x_i),目标函数可以表示为:

目标函数=i=1m(yihθ(xi))2\text{目标函数} = \sum_{i=1}^m (y_i - h_\theta(x_i))^2

2. 线性回归模型

线性回归模型表示为:

hθ(x)=θ0+θ1x+θ2x2++θnxnh_\theta(x) = \theta_0 + \theta_1x + \theta_2x^2 + \ldots + \theta_nx^n

对于简单的线性回归,即只有一个特征xx,模型简化为:

hθ(x)=θ0+θ1xh_\theta(x) = \theta_0 + \theta_1x

使用向量和矩阵表示,更加简洁和通用。假设有nn 个特征,那么输入矩阵X\mathbf{X} 为:

X=[1x11x12x1n1x21x22x2n1xm1xm2xmn]\mathbf{X} = \begin{bmatrix} 1 & x_{11} & x_{12} & \cdots & x_{1n} \\ 1 & x_{21} & x_{22} & \cdots & x_{2n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 1 & x_{m1} & x_{m2} & \cdots & x_{mn} \end{bmatrix}

参数向量θ\theta 为:

θ=[θ0θ1θ2θn]\theta = \begin{bmatrix} \theta_0 \\ \theta_1 \\ \theta_2 \\ \vdots \\ \theta_n \end{bmatrix}

预测值可以表示为:

hθ(x)=Xθh_\theta(\mathbf{x}) = \mathbf{X}\theta

3. 损失函数

损失函数J(θ)J(\theta) 定义为:

J(θ)=12mi=1m(hθ(xi)yi)2J(\theta) = \frac{1}{2m} \sum_{i=1}^m (h_\theta(x_i) - y_i)^2

将其表示为矩阵形式:

J(θ)=12m(XθY)T(XθY)J(\theta) = \frac{1}{2m} (\mathbf{X}\theta - \mathbf{Y})^T (\mathbf{X}\theta - \mathbf{Y})

其中,Y\mathbf{Y} 为观测值向量:

Y=[y1y2ym]\mathbf{Y} = \begin{bmatrix} y_1 \\ y_2 \\ \vdots \\ y_m \end{bmatrix}

4. 求解最优解

为了找到使损失函数最小的参数θ\theta,需要对损失函数求导数并设其为零。损失函数对θ\theta 的导数为:

J(θ)θ=θ(12m(XθY)T(XθY))\frac{\partial J(\theta)}{\partial \theta} = \frac{\partial}{\partial \theta} \left( \frac{1}{2m} (\mathbf{X}\theta - \mathbf{Y})^T (\mathbf{X}\theta - \mathbf{Y}) \right)

通过链式法则和矩阵导数的性质,可以得到:

J(θ)θ=1mXT(XθY)\frac{\partial J(\theta)}{\partial \theta} = \frac{1}{m} \mathbf{X}^T (\mathbf{X}\theta - \mathbf{Y})

将导数设为零:

XT(XθY)=0\mathbf{X}^T (\mathbf{X}\theta - \mathbf{Y}) = 0

5. 最优解的求解

解上面的方程,可以得到:

XTXθ=XTY\mathbf{X}^T\mathbf{X}\theta = \mathbf{X}^T\mathbf{Y}

假设XTX\mathbf{X}^T\mathbf{X} 是可逆的,可以求得θ\theta

θ=(XTX)1XTY\theta = (\mathbf{X}^T\mathbf{X})^{-1}\mathbf{X}^T\mathbf{Y}

这就是最小二乘法求解参数的公式。

6. 例子

我们希望找出一条最匹配给定数据点的直线y=β2x+β1y = \beta_2 x + \beta_1 。这里是最小二乘法的基本步骤:

  1. 定义数据点

    • (1,6)(1, 6)
    • (2,5)(2, 5)
    • (3,7)(3, 7)
    • (4,10)(4, 10)
  2. 构建矩阵

    • 矩阵XX 是包含每个xx 值和一个常数项的矩阵。
    • 矩阵YY 是包含每个yy 值的向量。
  3. 求解最优参数

    • 使用公式θ=(XTX)1XTY\theta = (X^T X)^{-1} X^T Y 计算最优解。

第一步:定义数据点

我们先定义 ( X ) 矩阵和 ( Y ) 向量:

X=[11121314],Y=[65710]X = \begin{bmatrix} 1 & 1 \\ 1 & 2 \\ 1 & 3 \\ 1 & 4 \end{bmatrix}, \quad Y = \begin{bmatrix} 6 \\ 5 \\ 7 \\ 10 \end{bmatrix}

第二步:计算最优参数

使用代码来计算最优参数β1\beta_1β2\beta_2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import numpy as np

# 定义矩阵 X 和向量 Y
X = np.array([
[1, 1],
[1, 2],
[1, 3],
[1, 4]
])
Y = np.array([6, 5, 7, 10])

# 计算最优参数 θ
theta = np.linalg.inv(X.T @ X) @ X.T @ Y

# 打印结果
theta

第三步:验证结果

矩阵求解过程如下:

拟合直线如下: