正规方程推导,详细版

推导正规方程(Normal Equation)通常是在线性回归的上下文中进行的。线性回归的目标是找到一个线性模型 h θ ( x ) = θ T x h_\theta(x) = \theta^T x hθ(x)=θTx,使得模型的预测值与实际值之间的差异(通常是均方误差)最小。

以下是推导正规方程的详细步骤,每一步都会说明所依据的公式或原理:

1. 定义损失函数

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

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

其中:

  • m m m 是样本数量。
  • x ( i ) x^{(i)} x(i) 是第 i i i 个样本的特征向量。
  • y ( i ) y^{(i)} y(i) 是第 i i i 个样本的实际值。
  • h θ ( x ( i ) ) h_\theta(x^{(i)}) hθ(x(i)) 是模型对第 i i i 个样本的预测值。
  • θ \theta θ 是模型的参数向量。

2. 展开损失函数

将 h θ ( x ( i ) ) h_\theta(x^{(i)}) hθ(x(i)) 替换为 θ T x ( i ) \theta^T x^{(i)} θTx(i),并将损失函数展开:

J ( θ ) = 1 2 m ∑ i = 1 m ( θ s h i z i T x ( i ) − y ( i ) ) 2 J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} (\theta^shiziT x^{(i)} - y^{(i)})^2 J(θ)=2m1∑i=1m(θshiziTx(i)−y(i))2

在推导正规方程的过程中,对损失函数求导是一个关键步骤。这里我们将详细说明如何使用矩阵微积分来求导。

首先,回顾损失函数的向量化表示:

J ( θ ) = 1 2 m ( X θ − y ) T ( X θ − y ) J(\theta) = \frac{1}{2m} (X\theta - y)^T (X\theta - y) J(θ)=2m1(Xθ−y)T(Xθ−y)

J ( θ ) = 1 2 m [ ( θ T X T − y T ) ( X θ − y ) ] J(\theta) = \frac{1}{2m} \left[ (\theta^T X^T - y^T)(X\theta - y) \right] J(θ)=2m1[(θTXT−yT)(Xθ−y)] 依据矩阵转置公式: ( A + B ) T = A T + B T (A+B)T=A^T+B^T (A+B)T=AT+BT, ( A B ) T = B T A T (AB)^T=B^TA^T (AB)T=BTAT。

= 1 2 m [ θ T X T X θ − θ T X T y − y T X θ + y T y ] = \frac{1}{2m} \left[ \theta^T X^T X \theta - \theta^T X^T y - y^T X \theta + y^T y \right] =2m1[θTXTXθ−θTXTy−yTXθ+yTy] 乘法展开

  1. 求导
    我们的目标是找到使 J ( θ ) J(\theta) J(θ) 最小的 θ \theta θ。为此,我们需要对 J ( θ ) J(\theta) J(θ) 关于 θ \theta θ 求导。 因为最开始我们的式子 J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)})^2 J(θ)=2m1∑i=1m(hθ(x(i))−y(i))2 是一个二次方程,所以他是一个凸函数,在导数为0的时候有最小值。

现在,我们对上式中的每一项关于 θ \theta θ 求导。

  • 对于 θ T X T X θ \theta^T X^T X \theta θTXTXθ:

使用矩阵微积分的规则, d d θ ( θ T A θ ) = 2 A θ \frac{d}{d\theta} (\theta^T A \theta) = 2A\theta dθd(θTAθ)=2Aθ(其中 A A A 是对称矩阵)。

因此, d d θ ( θ T X T X θ ) = 2 X T X θ \frac{d}{d\theta} (\theta^T X^T X \theta) = 2X^T X \theta dθd(θTXTXθ)=2XTXθ。

  • 对于 − θ T X T y -\theta^T X^T y −θTXTy 和 − y T X θ -y^T X \theta −yTXθ:

这两项是标量的转置,它们实际上是相等的(只是符号相反)。我们可以将它们合并为一个项( − 2 θ T X T y -2\theta^T X^T y −2θTXTy),并注意到 d d θ ( − θ T a ) = − a \frac{d}{d\theta} (-\theta^T a) = -a dθd(−θTa)=−a(其中 a a a 是常数向量, 这里a是 X T y X^Ty XTy)。 为什么这两项相等呢? 读者可以自行找三个矩阵乘一下试试, 为什么。 − θ T X T y -\theta^T X^T y −θTXTy 和 − y T X θ -y^T X \theta −yTXθ 是标量呢?

  1. 对于 − θ T X T y -\theta^T X^T y −θTXTy:

    • θ T \theta^T θT 是一个 1 × n 1 \times n 1×n 的矩阵(或向量)。
    • X T X^T XT 是一个 n × m n \times m n×m 的矩阵。
    • y y y 是一个 m × 1 m \times 1 m×1 的矩阵(或向量)。

    当 θ T \theta^T θT 与 X T X^T XT 相乘时,结果是一个 1 × m 1 \times m 1×m 的矩阵。然后,这个 1 × m 1 \times m 1×m 的矩阵再与 y y y 相乘(这里实际上是行向量与列向量的点积),结果是一个 1 × 1 1 \times 1 1×1 的矩阵,即一个标量。

  2. 对于 − y T X θ -y^T X \theta −yTXθ:

    • 虽然这个表达式的乘法顺序与上面的不同,但根据矩阵乘法的结合律和分配律,以及 X T X^T XT(如果 X X X 是实数矩阵)与 X X X 的对称性(如果 X X X 是对称矩阵,则 X = X T X = X^T X=XT,但在这里我们不需要 X X X 是对称的,只需要关注维度),这个表达式也可以化简为一个标量。然而,更直接的理解是:

      • y T y^T yT 是一个 1 × m 1 \times m 1×m 的矩阵。
      • X X X 是一个 m × n m \times n m×n 的矩阵。
      • θ \theta θ 是一个 n × 1 n \times 1 n×1 的矩阵。

      当 y T y^T yT 与 X X X 相乘时,结果是一个 1 × n 1 \times n 1×n 的矩阵。然后,这个 1 × n 1 \times n 1×n 的矩阵再与 θ \theta θ 相乘(同样是行向量与列向量的点积,但在这里是通过矩阵乘法隐含地进行的),结果同样是一个 1 × 1 1 \times 1 1×1 的矩阵,即一个标量。

因此, d d θ ( − θ T X T y − y T X θ ) = − X T y − ( X T y ) T = − 2 X T y \frac{d}{d\theta} (-\theta^T X^T y - y^T X \theta) = -X^T y - (X^T y)^T = -2X^T y dθd(−θTXTy−yTXθ)=−XTy−(XTy)T=−2XTy(注意: ( X T y ) T = y T X (X^T y)^T = y^T X (XTy)T=yTX,但在这里我们不需要转置,因为 X T y X^T y XTy 已经是一个与 θ \theta θ 兼容的向量)。

  1. 组合导数

将上述导数组合起来,得到:

∇ θ J ( θ ) = 1 2 m [ 2 X T X θ − 2 X T y ] \nabla_\theta J(\theta) = \frac{1}{2m} \left[ 2X^T X \theta - 2X^T y \right] ∇θJ(θ)=2m1[2XTXθ−2XTy]

= 1 m [ X T X θ − X T y ] = \frac{1}{m} \left[ X^T X \theta - X^T y \right] =m1[XTXθ−XTy]

令导数等于零

为了找到使损失函数最小的 θ \theta θ,我们令导数等于零:

1 m [ X T X θ − X T y ] = 0 \frac{1}{m} \left[ X^T X \theta - X^T y \right] = 0 m1[XTXθ−XTy]=0

X T X θ − X T y = 0 X^T X \theta - X^T y = 0 XTXθ−XTy=0

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

如果 X T X X^T X XTX 是可逆的,我们可以解出 θ \theta θ:

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

这一步推导过程如下:

在推导正规方程的过程中,我们得到了一个线性方程组:

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

这个方程组是一个 n × n n \times n n×n 的矩阵 X T X X^T X XTX 与一个 n × 1 n \times 1 n×1 的向量 θ \theta θ 的乘积等于另一个 n × 1 n \times 1 n×1 的向量 X T y X^T y XTy。

为什么可逆就能求出来结果?

  1. 定义与性质

    一个矩阵 A A A 是可逆的(或非奇异的),如果存在一个矩阵 A − 1 A^{-1} A−1,使得 A A − 1 = A − 1 A = I AA^{-1} = A^{-1}A = I AA−1=A−1A=I,其中 I I I 是单位矩阵。可逆矩阵的一个重要性质是,对于任何向量 b b b,线性方程组 A x = b Ax = b Ax=b 都有唯一解 x = A − 1 b x = A^{-1}b x=A−1b。

  2. 应用到正规方程

    在我们的情况下, A = X T X A = X^T X A=XTX。如果 X T X X^T X XTX 是可逆的,那么我们可以直接通过乘以 X T X X^T X XTX 的逆矩阵来求解 θ \theta θ:

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

    这个表达式给出了 θ \theta θ 的唯一解(在 X T X X^T X XTX 可逆的条件下)。

  3. 可逆的条件
    X T X X^T X XTX 可逆的一个充分条件是 X X X 的列向量线性无关(即 X X X 的列满秩)。这意味着 X X X 的列向量不能通过其他列向量的线性组合来表示,从而保证了 X T X X^T X XTX 是一个满秩矩阵,因此是可逆的。

  4. 求解过程

    当 X T X X^T X XTX 可逆时,我们实际上是在执行以下步骤来求解 θ \theta θ:

    • 首先,计算 X T y X^T y XTy,这是一个线性变换,将 y y y 投影到 X X X 的列空间上(或者更准确地说,是 X X X 的行空间,因为 X T X^T XT 是 X X X 的转置)。
    • 然后,通过乘以 ( X T X ) − 1 (X^T X)^{-1} (XTX)−1,我们实际上是在"撤销" X T X X^T X XTX 对某个向量所做的变换,从而找到原始参数向量 θ \theta θ。

总结

在求导过程中,我们使用了矩阵微积分的规则,特别是关于二次型和线性项的导数。通过仔细展开和组合这些项,我们得到了损失函数关于 θ \theta θ 的导数,并令其等于零来找到最优解。

以上过程通过提问文心一言获得,目前在这方面最好用的大模型。

相关推荐
Swift社区3 小时前
LeetCode - #139 单词拆分
算法·leetcode·职场和发展
Kent_J_Truman4 小时前
greater<>() 、less<>()及运算符 < 重载在排序和堆中的使用
算法
IT 青年4 小时前
数据结构 (1)基本概念和术语
数据结构·算法
Dong雨5 小时前
力扣hot100-->栈/单调栈
算法·leetcode·职场和发展
SoraLuna5 小时前
「Mac玩转仓颉内测版24」基础篇4 - 浮点类型详解
开发语言·算法·macos·cangjie
老艾的AI世界5 小时前
AI翻唱神器,一键用你喜欢的歌手翻唱他人的曲目(附下载链接)
人工智能·深度学习·神经网络·机器学习·ai·ai翻唱·ai唱歌·ai歌曲
DK221515 小时前
机器学习系列----关联分析
人工智能·机器学习
liujjjiyun5 小时前
小R的随机播放顺序
数据结构·c++·算法
¥ 多多¥5 小时前
c++中mystring运算符重载
开发语言·c++·算法
FreedomLeo16 小时前
Python数据分析NumPy和pandas(四十、Python 中的建模库statsmodels 和 scikit-learn)
python·机器学习·数据分析·scikit-learn·statsmodels·numpy和pandas