正规方程(normal equation)的三种推导方法

代码

在机器学习第四节课Linear Regression with Multiple Variables中,实现normal equation的一行代码。代码本身没啥难度,主要难点在于公式怎么推导出来的。

%----X = pinv(A),求矩阵 A 的广义逆矩阵
%----不使用 inv() 的原因在于不确定矩阵 A 是否为方阵
pinv(X'*x)*x'*y

normal equation的推导

在吴恩达老师的机器学习课程中,直接就给出了如下normal equation,无推导过程,像博主这种菜鸡直接懵逼,于是赶紧上网学习了一番,内化(自我感觉…)了三个推导方法后,分享于此,如有错误,还望指正。
θ = ( X T X ) − 1 X T y \theta = (X^{T}X)^{-1}X^{T}y θ=(XTX)1XTy

方法一:矩阵求导法

这个方法来源于吴恩达老师的CS229 machine learning中的课程PDF资料,这门课程与Coursera上的同名课程(也就是大部分人看的公开课版本)有所不同,需要更高的数学水平,更注重公式的推导。

课程图片
推导过程如下:
▽ θ J ( θ ) = ▽ θ 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 = ▽ θ 1 2 ( X θ − y ⃗ ) T ( X θ − y ⃗ ) \bigtriangledown _{\theta} J(\theta)=\bigtriangledown_{\theta}\frac{1}{2m}\sum_{i=1}^m(h_{\theta}(x^{(i)})-y^{(i)})^{2} =\bigtriangledown_{\theta}\frac{1}{2}(X\theta-\vec y)^{T}(X\theta-\vec y) θJ(θ)=θ2m1i=1m(hθ(x(i))y(i))2=θ21(Xθy )T(Xθy )
∵ ( A ± B ) T = A T + B T a n d ( A × B ) T = B T × A T ∴ ▽ θ J ( θ ) = 1 2 ▽ θ ( θ T X T X θ − θ T X T y ⃗ − y ⃗ T X θ + y ⃗ T y ⃗ ) ∵ 如 果 α 是 一 个 实 数 , 则 t r ( α ) = α 又 ∵ θ 是 ( n × 1 ) 的 矩 阵 , X 是 ( m × n ) 的 矩 阵 , y ⃗ 是 ( m × 1 ) 的 向 量 ∴ θ T X T X θ 的 维 数 变 换 ( 1 × n ) × ( n × m ) × ( m × n ) × ( n × 1 ) 得 到 一 个 ( 1 × 1 ) 的 方 阵 , 即 一 个 实 数 同 理 , θ T X T y ⃗ , y ⃗ T X θ , y ⃗ T y ⃗ 维 数 变 换 后 得 到 的 都 是 一 个 实 数 ∵ y ⃗ T y ⃗ 是 一 个 与 θ 无 关 的 常 量 , 对 θ 求 偏 导 为 0 , 则 在 式 子 中 可 以 省 略 掉 ∴ ▽ θ J ( θ ) = 1 2 ▽ θ t r ( θ T X T X θ − θ T X T y ⃗ − y ⃗ T X θ ) ∵ t r ( A ± B ) = A ± B a n d t r ( A ) = t r ( A T ) ∴ t r ( θ T X T y ⃗ ) = t r ( ( X θ ) T y ⃗ ) = t r ( y ⃗ X θ ) ∴ ▽ θ J ( θ ) = 1 2 ▽ θ ( t r ( θ T X T X θ ) − 2 t r ( y ⃗ T X θ ) ) ∵ t r 内 还 是 实 数 , 则 去 掉 t r 对 式 子 没 影 响 ∴ ▽ θ J ( θ ) = 1 2 ▽ θ ( θ T X T X θ − 2 y ⃗ T X θ ) ∵ 矩 阵 求 导 中 , ∂ b ⃗ T A X ∂ X = A T b ⃗ a n d ∂ X T A X ∂ X = ( A + A T ) X ∴ ▽ θ J ( θ ) = 1 2 ( 2 X T X θ − 2 X T y ⃗ ) = X T X θ − X T y ⃗ 令 ▽ θ J ( θ ) = 0 , 则 可 以 得 到 θ = ( X T X ) − 1 X T y \because (A\pm B)^{T}=A^T+B^T\quad and\quad (A\times B)^T=B^T\times A^T \\ \therefore \bigtriangledown _{\theta} J(\theta)=\frac{1}{2}\bigtriangledown_{\theta}(\theta^TX^TX\theta-\theta^TX^T\vec y-\vec y^TX\theta+\vec y^T\vec y) \\ \because 如果\alpha是一个实数,则tr(\alpha)=\alpha \\又\because \theta是(n\times 1)的矩阵,X是(m\times n)的矩阵,\vec y是(m\times 1)的向量 \\ \therefore \theta^TX^TX\theta的维数变换(1\times n)\times(n\times m)\times(m\times n)\times(n\times 1)得到一个(1\times 1)的方阵,即一个实数 \\ 同理,\theta^TX^T\vec y,\vec y^TX\theta ,\vec y^T\vec y维数变换后得到的都是一个实数 \\ \because \vec y^T\vec y是一个与\theta无关的常量,对\theta求偏导为0,则在式子中可以省略掉 \\ \therefore \bigtriangledown _{\theta} J(\theta)=\frac{1}{2}\bigtriangledown_{\theta}tr(\theta^TX^TX\theta-\theta^TX^T\vec y-\vec y^TX\theta) \\ \because tr(A\pm B)=A\pm B \quad and \quad tr(A)=tr(A^T) \\ \therefore tr(\theta^TX^T\vec y)=tr((X\theta)^T\vec y)=tr(\vec yX\theta) \\ \therefore \bigtriangledown _{\theta} J(\theta)=\frac{1}{2}\bigtriangledown_{\theta}(tr(\theta^TX^TX\theta)-2tr(\vec y^TX\theta)) \\ \because tr内还是实数,则去掉tr对式子没影响 \\ \therefore \bigtriangledown _{\theta} J(\theta)=\frac{1}{2}\bigtriangledown_{\theta}(\theta^TX^TX\theta-2\vec y^TX\theta) \\ \because 矩阵求导中,\frac{\partial \vec b^TAX}{\partial X}=A^T\vec b \quad and \quad \frac{\partial X^TAX}{\partial X}=(A+A^T)X \\ \therefore \bigtriangledown _{\theta} J(\theta)=\frac{1}{2}(2X^TX\theta-2X^T\vec y)=X^TX\theta-X^T\vec y \\ 令\bigtriangledown _{\theta} J(\theta)=0,则可以得到\theta = (X^{T}X)^{-1}X^{T}y \\ \quad (A±B)T=

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值