python minimize_梯度下降法实现线性回归(python手动实现+Tensorflow实现)

1.梯度下降法介绍

1.1梯度

梯度是指一个多元函数,对每一个参数求偏导,所得到的向量就是梯度。 eg:

上述相当于标量函数对向量变量进行求导,所得到得即时梯度,而多是高维函数对高位变量进行求导,得到的则是雅可比矩阵。

1.2梯度下降法

梯度下降法,简单来说,就是以一定的学习率$a$,或者说是步长,从当前位置,向梯度方向

下降。

从数学公式上来看:

,即进行了一次梯度下降。

其中学习率为

,这个参数是十分重要的,若
太小,则迭代次数很多,下降缓慢,若
过大,则无法达到最低点。

69eecca4c1d6d44bce10112519abaf82.png

此种方法用于获得模型的参数。

建模的步骤一般如下:

  1. 获取观测数据(即我们手中现有的数据)
  2. 确定模型与参数
  3. 对参数进行估计(下面梯度下降法开始发挥它的用处)
  4. 确定损失函数
  5. 通过损失函数对参数进行求导,得到梯度,并进行梯度下降。一定注意,是通过对损失函数进行梯度下降,来得到参数值!

比如我们用到的损失函数为:

里面的参数为

,因此应对
进行求导,其中
为标量,因此求导得到的是梯度,这就涉及到了矩阵求导术,移步知乎大神
https:// zhuanlan.zhihu.com/p/24 709748

此文章从标量求导引向矩阵求导,不仅介绍了如何求导,还介绍了很多数学思想,如数学追求整体性,相似性,定义不方便计算我们要创造公式定理,等等。

矩阵求导的本质其实是逐项求导。

或者直接看矩阵求导的公式:https://blog.csdn.net/WPR1991/article/details/82929843

​对
进行求导,主要用到两个公式,一个是矩阵求导链式法则,一个是矩阵求导中的对转置相乘进行求导,这类似与标量的平方求导。

得到:

或者

2.python手写实现

不管用什么语言实现,其本质都是通过矩阵运算实现的算法。下面算法的前置知识为:矩阵内积,上述梯度,numpy(实现矩阵运算)。

2.1实例描述

首先我们通过代码实现一个线性回归模型。然后通过梯度下降法对此模型进行拟合。

2.2代码实现

import 

运行结果:

0f097b47932157a50f2736de7cb3bc6f.png
#第二步

c852c746e6e49bb89efafdc5f9a097eb.png

可以看到,学习率越大,学习速度越快。

3. Tensorflow实现

import 
# 生成1维的W矩阵,取值是[-1,1]之间的随机数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值