[机器学习算法推导与总结] 线性回归最小二乘法的两种求解方法对比

normal equation(解析法)

求解目标函数如下,其中 X X X为所有样本的所有特征,是一个M(M个样本)行N(N个特征)列的矩阵, Y Y Y是M个样本的真实值,是M行的列向量, ω \omega ω是回归系数,是N行的列向量:
m i n J ( ω ) = ∣ ∣ Y − X ω ∣ ∣ 2 min J(\omega)= ||Y-X\omega||^2 minJ(ω)=YXω2
  用解析法求解 ω \omega ω,要对 J ( ω ) J(\omega) J(ω)求导,令导数为零:
d J ( ω ) d ω = 2 ( Y − X ω ) ⋅ ( − X T ) = 0 \frac{d J(\omega)}{d\omega}=2(Y-X\omega )\cdot (-X^T)=0 dωdJ(ω)=2(YXω)(XT)=0
  因此解得:
X T Y = X T X ω ω = ( X T X ) − 1 X T Y \begin{aligned} & X^T Y = X^TX\omega \\ & \omega =(X^TX)^{-1}X^T Y \end{aligned} XTY=XTXωω=(XTX)1XTY
  这就是normal equation。

梯度下降法

梯度下降的目标函数形式写法有所不同,不采用normal equation完全矩阵的写法,而是用求和的写法。其中 x ( i ) x^{(i)} x(i)为第i个样本的特征列向量, ω \omega ω为回归系数列向量, y ( i ) y^{(i)} y(i)为第i个样本的真实值:
m i n J ( ω ) = 1 2 ∑ i = 1 M ( y ( i ) − ω T x ( i ) ) 2 min J(\omega)=\frac{1}{2} \sum_{i=1}^{M}( y^{(i)}-\omega^T x^{(i)})^2 minJ(ω)=21i=1M(y(i)ωTx(i))2
  梯度下降法就是要求目标函数的梯度,对 ω \omega ω的第j维求导:
d J ( ω ) d ω j = ∑ i = 1 M ( y ( i ) − ω T x ( i ) ) ⋅ x j ( i ) \frac{d J(\omega) } {d\omega_j }=\sum_{i=1}^{M}( y^{(i)}-\omega^T x^{(i)})\cdot x^{(i)}_j dωjdJ(ω)=i=1M(y(i)ωTx(i))xj(i)
  然后更新 ω \omega ω的第j维:
ω j → ω j − α d J ( ω ) d ω j \omega_j \rightarrow \omega_j - \alpha \frac{d J(\omega) } {d\omega_j } ωjωjαdωjdJ(ω)
  每次迭代都要更新 ω \omega ω的所有维。
  不过每次迭代不一定要使用全部样本,可以使用随机梯度下降法,每次只随机选择一个样本。

两种方法的对比
normal equation梯度下降法
要求 ( X T X ) (X^TX) (XTX)必须可逆不要求 ( X T X ) (X^TX) (XTX)可逆
( X T X ) (X^TX) (XTX)的逆费时较多,当特征较多时运算很慢特征较多时运算不会特别慢
不需要feature scaling需要feature scaling
只需一次计算就能求解需要多次迭代
不需要选择学习步长需要选择学习步长
对于更复杂的问题可能求不出解可用于更复杂的问题,可移植性强
如何选择方法

吴恩达建议,N>10000时,使用梯度下降法,N<10000时,使用normal equation。

补充:向量求导

对于向量 X ω X\omega Xω的求导:
d X ω d ω = X T \frac{d X\omega}{d\omega}=X^T dωdXω=XT
  由于 ω \omega ω是一个列向量,对 ω \omega ω求导的结果一定是一个列向量,或是多个列向量组成的矩阵,每个列向量都是一个样本的特征值列向量。而 X X X是由多个特征行向量组成的矩阵,因此求导的结果应该是 X T X^T XT
  
  对于 ∣ ∣ Y − X ω ∣ ∣ 2 ||Y-X\omega||^2 YXω2的求导,其中一种参考 zhaosarsa
d ∣ ∣ Y − X ω ∣ ∣ 2 d ω = ( Y − X ω ) T ( Y − X ω ) d ω = ( Y T − ω T X T ) ( Y − X ω ) d ω = ( Y T Y − Y T X ω − ω T X T Y + ω T X T X ω ) d ω = − X T Y − X T Y + 2 X T X ω = − 2 X T Y + 2 X T X ω \begin{aligned} &amp;\frac{d ||Y-X\omega||^2 }{d \omega } \\ =&amp;\frac{(Y-X\omega)^T (Y-X\omega)}{d\omega} \\ =&amp;\frac{(Y^T-{\omega}^T X^T) (Y-X\omega)}{d\omega} \\ =&amp;\frac{(Y^TY-Y^TX\omega-{\omega}^TX^TY+{\omega}^TX^TX\omega) }{d\omega} \\ =&amp; - X^T Y- X^TY + 2X^TX\omega\\ =&amp;-2X^T Y + 2X^TX\omega \end{aligned} =====dωdYXω2dω(YXω)T(YXω)dω(YTωTXT)(YXω)dω(YTYYTXωωTXTY+ωTXTXω)XTYXTY+2XTXω2XTY+2XTXω

第二种求导的方法使用了链式求导,参考OO猪侠,结果与上述方法一样:
d ∣ ∣ Y − X ω ∣ ∣ 2 d ω = d ( Y − X ω ) d ω ⋅ d ∣ ∣ Y − X ω ∣ ∣ 2 d ( Y − X ω ) = ( − X T ) ⋅ 2 ( Y − X ω ) = − 2 X T Y + 2 X T X ω \begin{aligned} &amp;\frac{d ||Y-X\omega||^2 }{d \omega } \\ =&amp; \frac{d (Y-X\omega) } {d \omega } \cdot \frac{d ||Y-X\omega||^2}{d(Y-X\omega )} \\ =&amp; (-X^T) \cdot 2(Y-X\omega ) \\ =&amp; -2X^TY+2X^T X\omega \end{aligned} ===dωdYXω2dωd(YXω)d(YXω)dYXω2(XT)2(YXω)2XTY+2XTXω

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值