线性回归模型采用梯度下降算法求最优解
来源:互联网 发布: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)
运行结果:
- 线性回归模型采用梯度下降算法求最优解
- 梯度下降法,最小二乘法求线性回归
- 梯度下降法,最小二乘法求线性回归
- 梯度下降法,最小二乘法求线性回归
- 一元线性回归与梯度下降算法
- 线性回归和梯度下降算法
- 线性回归与梯度下降算法
- 线性回归与梯度下降算法
- 线性回归与梯度下降算法(1)
- 线性回归、梯度下降算法与 tensorflow
- 基于梯度下降算法求解线性回归
- 线性回归及梯度下降算法详解
- 线性回归与梯度下降算法
- 线性回归&梯度下降
- 梯度下降法解多元线性回归
- 梯度下降法解线性回归
- python利用梯度下降求多元线性回归
- 基于梯度下降法的线性回归模型
- TensorFlow的张量与会话
- Enumeration和iterator
- UEditor 请求后台配置项http错误,上传功能将不能正常使用!
- 搭建SSH框架
- base64编码解码js
- 线性回归模型采用梯度下降算法求最优解
- Tensorflow安装及更新
- 我的第一篇博客
- RecyclerView嵌套问题
- 搭建vue.js开发环境过程
- win7与虚拟机中linux共享文件方法
- 无限轮播自动获取图片
- Hashset和treeset
- AutoFac 的使用