单变量线性回归(梯度下降、正规方程组法)

假设函数:h_{0}\left ( x \right )=\theta _{0}+\theta _{1}x

参数 :  \theta_{0},\theta_{1}

代价函数:J \left ( \theta _{0},\theta _{1}\right ).=\frac{1}{2m}\sum_{i=1}^{m}\left ( h _{0}\left ( x ^{\left ( i \right )}\right )-y^{\left ( i \right )}\right )^{2}

(关于为什么是除以2m而不是m,应该是为了后续求导方便。实际上无论除以几都并不影响结果,就好像 y=\frac{1}{2}x^2 在x=0处取得最小值,而 y=\frac{1}{3}x^2 也在x=0处取得最小值一样)

目标函数:\underset{\theta_{0},\theta_{1}}{\mathrm{minimize}}\: J \left ( \theta_{0},\theta_{1} \right )

接下来就是最小化目标函数,这里采用梯度下降法。

      梯度下降法,举一个简单的例子,一个人站在山顶,朝四周望去,找出最佳下山方向,朝着该方向行走一小段距离,接着以此为起点,再次朝四周望去,找出最佳下山方向,继续行走一段距离,直到到达山底。

                                                

 

算法:

          temp0 :=\theta_{0}-\alpha \frac{\partial }{\partial \theta_{0}}J\left (\theta_{0},\theta_{1} \right )

          temp1 :=\theta_{1}-\alpha \frac{\partial }{\partial \theta_{1}}J\left (\theta_{0},\theta_{1} \right )

         \theta _{0}:=temp0

         \theta _{1}:=temp1

注意要做到同步更新,以下做法是错误的:

       temp0 :=\theta_{0}-\alpha \frac{\partial }{\partial \theta_{0}}J\left (\theta_{0},\theta_{1} \right )

      \theta _{0}:=temp0

      temp1 :=\theta_{1}-\alpha \frac{\partial }{\partial \theta_{1}}J\left (\theta_{0},\theta_{1} \right )

      \theta _{1}:=temp1

      其中\alpha是学习速率,最后一项是偏导数,对应于J\left ( \theta _{0} \right )图像上横坐标为\theta _{0}点的斜率,当\theta _{0}位于图像局部最优点右侧时,偏导数大于0,且\alpha大于0,\theta _{0}减小。反之,位于左侧时\theta _{0}增大。

                                     

       关于\alpha的大小选取问题,当\alpha取值过小时,迭代次数较多,更新缓慢;当\alpha取值过大时,可能会导致发散。

\alpha过小的情况:                                                                    \alpha过大的情况:

   

       事实上,梯度下降法可适用于其他代价函数。

       求解代价函数最小值还有正规方程组的方法,梯度下降法迭代次数较多,但是适合于大量数据集。因为当数据集很大时候(上百万),正规方程组的矩阵维数过大,占用很大内存。

附:正规方程组法(多元回归)

                           

对于m组样例,n个属性的数据,X是 m\times \left ( n+1 \right )  的矩阵,y 是 m\times 1 的矩阵,\theta是 \left ( n+1 \right )\times 1 的矩阵。

其中\theta是系数矩阵,假设 \theta = \left [ \theta_{0} \ \theta_{1}\ \theta_{2} \ ... \ \theta_{n}\right ]^{T},则有y=\theta _{0}+\theta _{1}x_{1}+\theta _{2}x_{2}+...+\theta _{n}x_{n}.

记得在学数值分析时讲的一元线性回归是这样计算的:(n组数据,一个属性,每组数据的权重一样,如果权重不一样则不能直接求和,而要加权求和)

                                                                                     y=a+bx

                                                 \begin{bmatrix} \sum_{i=1}^{n} 1 &\sum_{i=1}^{n}x_{i} \\ \\ \sum_{i=1}^{n}x_{i} & \sum_{i=1}^{n}x_{i}^{2} \end{bmatrix} \times \begin{bmatrix} a\\ b \end{bmatrix} = \begin{bmatrix} \sum_{i=1}^{n}y_{i}\\ \\ \sum_{i=1}^{n}x_{i}y_{i} \end{bmatrix}

带入数据,用一个二元一次方程组就能手算求出。(专门应对考试的方法)

现在终于明白这个式子的原理了,其实就是 \left ( X^{T} X\right ) \times \theta = X^{T} y.

另外,对于非线性的,要先转化为线性的也可用此法计算。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值