线性回归模型采用梯度下降算法求最优解

来源:互联网 发布:unity3d输出日志文件 编辑:程序博客网 时间:2024/06/07 06:59

本人学习人工智能之深度学习已有一段时间,第一个机器学习算法就是梯度下降算法,本博客将详细阐述线性回归模型采用梯度下降算法求得最优解。
本文将从运用以下流程图讲解SGD:
1、线性回归模型
2、代价函数
3、使用梯度下降最小化代价函数

第一部分:线性回归模型
这里写图片描述

右图横坐标为房子大小,纵坐标为房子的价格,从红色的数据集中可以看出该数据集可以采用线性回归模型进行拟合,当然也可以采用多项式,这里讲解就采用比较简单的线性回归,左边的公式是线性回归的公式。

第二部分:代价函数
代价函数主要是测试我们所假设的线性回归模型的性能优劣,
这里写图片描述

第一个公式是我们第一部分所假设的线性回归模型,第二个公式是代价函数J,该函数是一个平方误差函数,是线性回归模型中比较典型的代价函数。其中m是指所给数据的容量大小,y是所给样本对应x值的真实的y值。h是指我们假设的模型对应相应的x值预估的y’值。获取模型函数和代价函数之后,接下来的目标就是最小化代价函数,使得模型预估值和真实值之间的差距最小。

这里写图片描述

上图是根据模型公式用matlab画出的三维图形,我们的目标是运用梯度下降使获得J的最低点。

第三部分:使用梯度下降最小化代价函数

这里写图片描述

上述公式是梯度下降算法公式,代价函数分别对两个参数进行求导得出

这里写图片描述

接下来介绍一下梯度下降算法中微分项和学习率a如何执行梯度下降

这里写图片描述

上图第一个公式是模型数学公式,对应第一个公式,其画出的代价函数的图形是如图所示,图中的绿色的斜线的斜率代表了微分项的值,当斜率大于0时这里写图片描述

该公式计算得到的值就会比原先的值小,因此斜线的斜率会更加平缓,同时与J的切点也会更加靠近最低点,当斜率小于0也是同理。

学习率:
这里写图片描述

当a适当时这里写图片描述会慢慢靠近J的最低点所对应的这里写图片描述值,但是当a值很大时可能会最后跳过最低点而发散。

以下是我用python写的一个线性回归模型梯度下降代码,主要用到了上述我所讲的模型公式和代价函数公式:

from __future__ import divisionx=[100,120,130,150,200]y=[1000000,1200000,1300000,1500000,2000000]epsilon = 0.000001alpha = 0.001error0 = 0error1 = 0diff = 0theta0 = 0theta1 = 10000m = len(x)#计算参数for i in range(m):    diff = diff + (y[i]-(theta0 + theta1 * x[i]))    theta0 = theta0 - alpha * diff / 5    theta1 = theta1 - alpha * diff / 5 * x[i]print(theta0,theta1)#计算代价函数for i in range(m):    error1 = error1 + (y[i]-(theta0 + theta1 * x[i]))*(y[i]-(theta0 + theta1 * x[i]))    error1 = error1 / 10    if abs(error1 - error0)<epsilon:        break    else:        error0 = error1print(theta0,theta1)

运行结果:
这里写图片描述

原创粉丝点击