回归问题经典算法 | 线性回归:梯度下降法

上一篇文章中我们通过对表达式的推导,得到了精度值最高模型参数 θ \theta θ
然而,解析解法并不是工程中的最佳解法,那么究竟哪种解法更用呢?下面我们来接着讲:

一. 线性回归 梯度下降法

结合上一篇文章的推导,我们最终得到
L ( θ ) = m ∗ l n 1 2 π σ − 1 σ 2 ∗ 1 2 ∑ i = 1 m ( y ( i ) − θ T x ( i ) ) 2 L(\theta )=m\ast ln\frac{1}{\sqrt{2\pi}\sigma}-\frac{1}{\sigma ^{2} } \ast \frac{1}{2}\sum_{i=1}^{m}{(y^{(i)}-\theta^{T}x^{(i)})^{2} } L(θ)=mln2π σ1σ2121i=1m(y(i)θTx(i))2

其中,损失函数就是:
J ( θ ) = 1 2 ∑ i = 1 m ( y ( i ) − θ T x ( i ) ) 2 J(\theta)=\frac{1}{2}\sum_{i=1}^{m}{(y^{(i)}-\theta^{T}x^{(i)})^{2} } J(θ)=21i=1m(y(i)θTx(i))2

结合我们前面对损失函数的讨论,通过分析可以得出:

线性回归中,该损失函数必定是凸函数

θ \theta θ逐渐接近真值时,J值会变小
θ \theta θ逐渐原理真值时,J值会变大

这里我们再来重申梯度下降的更新公式:
θ i ′ = θ i − α ∂ J ∂ θ i {\theta _{i} }' =\theta _{i}-\alpha \tfrac{\partial J}{\partial \theta _{i}} θi=θiαθiJ

这样就解决了线性回归的基本问题,确定模型参数!!!

下面,我们先来计算梯度:

J ( θ ) = 1 2 ∑ i = 1 m ( y ( i ) − θ T x ( i ) ) 2 J(\theta)=\frac{1}{2}\sum_{i=1}^{m}{(y^{(i)}-\theta^{T}x^{(i)})^{2} } J(θ)=21i=1m(y(i)θTx(i))2

       = 1 2 ∗ m ∑ i = 1 m ( y ^ ( i ) − y ( i ) ) 2 =\frac{1}{2\ast m}\sum_{i=1}^{m}(\hat{y}^{(i)}-y^{(i)})^{2} =2m1i=1m(y^(i)y(i))2

若想求得凸函数的最小值,即 θ \theta θ最小值,方法非常明确:求偏导
    对于每一个 θ i \theta _{i} θi 0 ≤ i ≤ N 0\le i\le N 0iN)求导,即为:
{ ∂ J ∂ θ 0 = 1 m [ ( y ^ ( 1 ) − y ( 1 ) ) x 0 ( 1 ) + . . . + ( y ^ ( m ) − y ( m ) ) x 0 ( m ) ] ∂ J ∂ θ 1 = 1 m [ ( y ^ ( 1 ) − y ( 1 ) ) x 1 ( 1 ) + . . . + ( y ^ ( m ) − y ( m ) ) x 1 ( m ) ] . . . ∂ J ∂ θ N = 1 m [ ( y ^ ( 1 ) − y ( 1 ) ) x N ( 1 ) + . . . + ( y ^ ( m ) − y ( m ) ) x N ( m ) ] \begin{cases} \\\frac{\partial J}{\partial \theta _{0}}=\frac{1}{m}\left [ (\hat{y} ^{(1)}-y^{(1)})x_{0}^{(1)}+...+ (\hat{y} ^{(m)}-y^{(m)}) x_{0}^{(m)} \right ] \\\frac{\partial J}{\partial \theta _{1}}=\frac{1}{m}\left [ (\hat{y} ^{(1)}-y^{(1)})x_{1}^{(1)}+...+ (\hat{y} ^{(m)}-y^{(m)}) x_{1}^{(m)} \right ] \\...\\\frac{\partial J}{\partial \theta _{N}}=\frac{1}{m}\left [ (\hat{y} ^{(1)}-y^{(1)})x_{N}^{(1)}+...+ (\hat{y} ^{(m)}-y^{(m)}) x_{N}^{(m)} \right ]\end{cases} θ0J=m1[(y^(1)y(1))x0(1)+...+(y^(m)y(m))x0(m)]θ1J=m1[(y^(1)y(1))x1(1)+...+(y^(m)y(m))x1(m)]...θNJ=m1[(y^(1)y(1))xN(1)+...+(y^(m)y(m))xN(m)]

这里简单解释下上面这组公式:

首先明确,整个公式只有 y ^ \hat{y} y^含有未知数 θ \theta θ
     y ^ = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + . . . \hat{y}=\theta _{0}x_{0} +\theta _{1}x_{1}+\theta _{2}x_{2} +... y^=θ0x0+θ1x1+θ2x2+...
那么就会得到
     J ( θ ) = 1 2 ∗ m ∑ i = 1 m ( θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ N x N − y ( i ) ) 2 J(\theta)=\frac{1}{2\ast m}\sum_{i=1}^{m}(\theta _{0}x_{0} +\theta _{1}x_{1}+\theta _{2}x_{2} +...+\theta _{N}x_{N} -y^{(i)} )^{2} J(θ)=2m1i=1m(θ0x0+θ1x1+θ2x2+...+θNxNy(i))2

假设,现在我想求 θ 0 \theta _{0} θ0的梯度,也就相当于
    我需要求所有样本中 θ 0 \theta _{0} θ0的梯度之和
则:

第一个样本 θ 0 \theta _{0} θ0的梯度值为: 1 m ( y ^ ( 1 ) − y ( 1 ) ) x 0 ( 1 ) \frac{1}{m}(\hat{y} ^{(1)}- y^{(1)})x_{0}^{(1)} m1(y^(1)y(1))x0(1)
第二个样本 θ 0 \theta _{0} θ0的梯度值为: 1 m ( y ^ ( 2 ) − y ( 2 ) ) x 0 ( 2 ) \frac{1}{m}(\hat{y} ^{(2)}- y^{(2)})x_{0}^{(2)} m1(y^(2)y(2))x0(2)

PS:复合函数求导

因此, 1 m [ ( y ^ ( 1 ) − y ( 1 ) ) x 0 ( 1 ) + . . . + ( y ^ ( m ) − y ( m ) ) x 0 ( m ) ] \frac{1}{m}\left [ (\hat{y} ^{(1)}-y^{(1)})x_{0}^{(1)}+...+ (\hat{y} ^{(m)}-y^{(m)}) x_{0}^{(m)} \right ] m1[(y^(1)y(1))x0(1)+...+(y^(m)y(m))x0(m)]为m个样本求得的平均梯度

【注意】
求导结果中的 1 m \frac{1}{m} m1作用为:避免受到样本数量的影响

然而,在数据不变的前提下,无论是否有 1 m \frac{1}{m} m1,公式求得的样本总梯度是不变的;

转化为矩阵:
∂ J ∂ θ = 1 m X T ( y ^ − y ) \frac{\partial J}{\partial \theta } =\frac{1}{m}X^{T}(\hat{y}-y ) θJ=m1XT(y^y)

因此,申梯度下降的更新公式也就变成了
θ ′ = θ − α 1 m X T ( y ^ − y ) {\theta }' =\theta -\alpha \frac{1}{m}X^{T}(\hat{y}-y ) θ=θαm1XT(y^y)


本次文章分享就到这,有什么疑问可在评论区留言

PS:本文相关代码存放位置

     线性回归 梯度下降代码实现(非linear-model版)

感谢阅读~


  • 29
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ToBeCertain

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值