线性回归矩阵求解和梯度求解

正规方程求解线性回归

首先正规方程如下:
Θ = ( X T X ) − 1 X T y \begin{equation} \Theta = (X^T X)^{-1} X^T y \end{equation} Θ=(XTX)−1XTy

接下来通过线性代数的角度理解这个问题。

二维空间

在二维空间上,有两个向量 a a a和 b b b,若 b b b投影到 a a a要怎么做,很简单,做垂线, 那么投影后的向量记为 p p p,那么 b b b和 p p p之间的error记为 e = b − p e=b-p e=b−p。同时 p p p在 a a a上,所以 p p p一定是 a a a的 x x x(标量)倍,记为 p = x a p=xa p=xa。因为 e e e垂直 a a a,所以 a T ( b − x a ) = 0 a^T(b-xa)=0 aT(b−xa)=0 ,即 x a T a = a T b xa^Ta=a^Tb xaTa=aTb,得到
x = a T b a T a x=\frac{a^Tb}{a^Ta} x=aTaaTb

那么
p = x a = a a T b a T a p=xa=a\frac{a^Tb}{a^Ta} p=xa=aaTaaTb

根据上面的公式,如果 a a a翻倍了,那么投影不变,如果 b b b翻倍了,投影也翻倍。投影是由一个矩阵 P P P完成的, p = P b p=Pb p=Pb,那么投影矩阵 P P P:
P = a a T a T a P=\frac{aa^T}{a^Ta} P=aTaaaT

用任何向量乘这个投影矩阵,你总会变换到它的列空间中。同时显然有: P T = P P^T=P PT=P , P 2 = P P^2=P P2=P,即投影两次的结果还是和第一次一样。

高维空间

为什么要做投影呢?

因为, A x = b Ax=b Ax=b可能无解,比如一堆等式,比未知数还多,就可能造成无解。那么该怎么办,只能求解最接近的哪个可能解,哪个才是最接近的呢?问题是 A x Ax Ax总是在 A A A的列空间中,而 b b b不一定在。所以要怎么微调 b b b将它变为列空间中最接近它的那一个,那么就将问题换作求解,有解的 A x ^ = p A\hat{x}=p Ax^=p。所以得找最好的那个投影 p p p,以最好的接近 b b b,这就是为什么要引入投影的原因了。

那么我们来看高维空间,这里以三维空间举例,自然可以推广到n维空间。

现在有一个不在平面上的 b b b向量,想要将 b b b投影在平面上,平面可以由两个基向量 a 1 a_1 a1和 a 2 a_2 a2表示。同样的 b b b投影到平面上的误差记为 e = b − p e=b-p e=b−p,这个 e e e是垂直平面的。 p = x 1 ^ a 1 + x 2 ^ a 2 = A x ^ p=\hat{x_1}a_1+\hat{x_2}a_2=A\hat{x} p=x1^a1+x2^a2=Ax^,我们想要解出 x ^ \hat{x} x^。因为 e e e是垂直平面,所以有 b − A x ^ b-A\hat{x} b−Ax^垂直平面,即有 a 1 T ( b − A x ^ ) = 0 a_1^T(b-A\hat{x})=0 a1T(b−Ax^)=0, a 2 T ( b − A x ^ ) = 0 a_2^T(b-A\hat{x})=0 a2T(b−Ax^)=0,表示为矩阵乘法便有
A T ( b − A x ^ ) = A e = 0 A^T(b-A\hat{x})=Ae=0 AT(b−Ax^)=Ae=0

这个形式与二维空间的很像吧。对于 A e = 0 Ae=0 Ae=0,可知 e e e位于 A T A^T AT的零空间,也就是说 e e e垂直于于 A A A的列空间。由上面式子可得
A T A x ^ = A T b A^TA\hat{x}=A^Tb ATAx^=ATb

继而
x ^ = ( A T A ) − 1 A T b \hat{x}=(A^TA)^{-1}A^Tb x^=(ATA)−1ATb

这不就是我们的正规方程吗。到这里我们的正规方程便推导出来了,但为了内容完整,我们下面收个尾。
p = A x ^ = A ( A T A ) − 1 A T b P = A ( A T A ) − 1 A T P T = P P 2 = P p=A\hat{x}=A(A^TA)^{-1}A^Tb \\ P=A(A^TA)^{-1}A^T\\ P^T=P\\ P^2=P p=Ax^=A(ATA)−1ATbP=A(ATA)−1ATPT=PP2=P

这些结论还是和二维空间上的一样, P T = P P^T=P PT=P , P 2 = P P^2=P P2=P,即投影两次的结果还是和第一次一样。

最小二乘法

正规方程的一个常见应用例子是最小二乘法。从线性代数的角度来看,正规方程是通过最小二乘法求解线性回归问题的一种方法。以下是正规方程的概述:

1. 模型表示

在线性回归中,我们假设目标变量 y y y 与特征矩阵 X X X 之间存在线性关系:

y ^ = X θ \hat{y} = X \theta y^=Xθ

其中:

  • y ^ \hat{y} y^ 是预测值(一个 m m m 维列向量)。
  • X X X 是特征矩阵( m × n m \times n m×n),每行代表一个样本,每列代表一个特征。
  • θ \theta θ 是模型参数(权重向量)。

2. 目标函数

我们的目标是最小化预测值与实际值之间的误差,通常使用残差平方和:

J ( θ ) = ∥ y − X θ ∥ 2 J(\theta) = \|y - X\theta\|^2 J(θ)=∥y−Xθ∥2

3. 求解过程

为了找到使得 J ( θ ) J(\theta) J(θ) 最小的 θ \theta θ,我们可以通过对 J ( θ ) J(\theta) J(θ) 关于 θ \theta θ 的导数求解,设导数为零:

∇ J ( θ ) = − 2 X T ( y − X θ ) = 0 \nabla J(\theta) = -2X^T(y - X\theta) = 0 ∇J(θ)=−2XT(y−Xθ)=0

展开后得到:

X T X θ = X T y X^T X \theta = X^T y XTXθ=XTy

4. 正规方程

这个方程称为正规方程,其形式为:

X T X θ = X T y X^T X \theta = X^T y XTXθ=XTy

5. 解的唯一性

  • 若 X T X X^T X XTX 是可逆的(即列向量线性无关),则可以通过求逆得到参数的解:

θ = ( X T X ) − 1 X T y \theta = (X^T X)^{-1} X^T y θ=(XTX)−1XTy

  • 如果 X T X X^T X XTX 不可逆(即存在多重共线性),则正规方程可能没有唯一解。

6. 几何解释

从几何的角度,正规方程可以被视为在特征空间中寻找一个超平面,使得目标变量 y y y 的投影与预测值 X θ X \theta Xθ 之间的误差最小化。

总结

正规方程通过线性代数的方法为线性回归提供了解的表达式,使得我们可以有效地计算参数。其核心思想是通过最小化残差平方和,寻找最佳拟合的线性模型。


梯度下降求解线性回归

python 复制代码
import numpy as np
def linear_regression_gradient_descent(X: np.ndarray, y: np.ndarray, alpha: float, iterations: int) -> np.ndarray:
    m, n = X.shape
    theta = np.zeros((n, 1))
    for _ in range(iterations):
        predictions = X @ theta
        errors = predictions - y.reshape(-1, 1)
        updates = X.T @ errors / m
        theta -= alpha * updates
    return np.round(theta.flatten(), 4)

其他都好理解,下面主要讲梯度updates的推导

1. 定义损失函数

线性回归的损失函数通常是均方误差(Mean Squared Error, MSE):

MSE = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 \text{MSE} = \frac{1}{2m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)})^2 MSE=2m1i=1∑m(hθ(x(i))−y(i))2

这里, h θ ( x ( i ) ) = X ( i ) ⋅ θ h_\theta(x^{(i)}) = X^{(i)} \cdot \theta hθ(x(i))=X(i)⋅θ 是模型的预测值, y ( i ) y^{(i)} y(i) 是实际值。

2. 对损失函数求导

为了最小化损失函数,我们需要对参数 θ \theta θ 求导:

∂ MSE ∂ θ = ∂ ∂ θ ( 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 ) \frac{\partial \text{MSE}}{\partial \theta} = \frac{\partial}{\partial \theta} \left( \frac{1}{2m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)})^2 \right) ∂θ∂MSE=∂θ∂(2m1i=1∑m(hθ(x(i))−y(i))2)

应用链式法则,首先求导内部的平方项:

∂ ∂ θ ( h θ ( x ( i ) ) − y ( i ) ) 2 = 2 ( h θ ( x ( i ) ) − y ( i ) ) ⋅ ∂ h θ ( x ( i ) ) ∂ θ \frac{\partial}{\partial \theta} (h_\theta(x^{(i)}) - y^{(i)})^2 = 2(h_\theta(x^{(i)}) - y^{(i)}) \cdot \frac{\partial h_\theta(x^{(i)})}{\partial \theta} ∂θ∂(hθ(x(i))−y(i))2=2(hθ(x(i))−y(i))⋅∂θ∂hθ(x(i))

而且 h θ ( x ( i ) ) = X ( i ) ⋅ θ h_\theta(x^{(i)}) = X^{(i)} \cdot \theta hθ(x(i))=X(i)⋅θ,所以:

∂ h θ ( x ( i ) ) ∂ θ = X ( i ) \frac{\partial h_\theta(x^{(i)})}{\partial \theta} = X^{(i)} ∂θ∂hθ(x(i))=X(i)

将这个结果代入:

∂ MSE ∂ θ = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) X ( i ) \frac{\partial \text{MSE}}{\partial \theta} = \frac{1}{m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) X^{(i)} ∂θ∂MSE=m1i=1∑m(hθ(x(i))−y(i))X(i)

3. 用向量表示

将上述和式转换为向量形式。定义误差向量:

errors = predictions − y \text{errors} = \text{predictions} - y errors=predictions−y

其中 predictions = X ⋅ θ \text{predictions} = X \cdot \theta predictions=X⋅θ。这样,梯度可以表示为:

gradient = 1 m ( X T ⋅ errors ) \text{gradient} = \frac{1}{m} (X^T \cdot \text{errors}) gradient=m1(XT⋅errors)

4. 结论

因此,梯度的计算公式来源于损失函数的求导过程,通过向量化的方式将每个样本的误差与特征相乘,得出对每个参数的影响。这是梯度下降法中更新参数的基础。

相关推荐
cxr82823 分钟前
洪水灾害多智能体分布式模拟示例代码
深度学习·机器学习·迁移学习
可喜~可乐2 小时前
循环神经网络(RNN)入门指南:从原理到实践
人工智能·rnn·深度学习·神经网络·机器学习·lstm
Adenialzz3 小时前
Rectified Flow 原理简介与示例代码解读
人工智能·深度学习·机器学习·计算机视觉·diffusion
ylfmsn3 小时前
线性回归背后的数学
算法·回归·线性回归
看星猩的柴狗3 小时前
机器学习-高斯混合模型
人工智能·机器学习
W Y4 小时前
【智能制造-50】雅可比矩阵在机器人中如何应用
矩阵·机器人·制造
power-辰南4 小时前
机器学习之数据分析及特征工程详细分析过程
人工智能·python·机器学习·大模型·特征
FreedomLeo19 小时前
Python机器学习笔记(十三、k均值聚类)
python·机器学习·kmeans·聚类
最好Tony13 小时前
深度学习blog-Transformer-注意力机制和编码器解码器
人工智能·深度学习·机器学习·计算机视觉·自然语言处理·chatgpt
程序员一诺14 小时前
【机器学习】嘿马机器学习(算法篇)第11篇:决策树算法,学习目标【附代码文档】
人工智能·python·算法·机器学习