python 还原梯度下降算法实现一维线性回归


Posted in Python onOctober 22, 2020

首先我们看公式:

python 还原梯度下降算法实现一维线性回归

这个是要拟合的函数

然后我们求出它的损失函数, 注意:这里的n和m均为数据集的长度,写的时候忘了

python 还原梯度下降算法实现一维线性回归

注意,前面的theta0-theta1x是实际值,后面的y是期望值
接着我们求出损失函数的偏导数:

python 还原梯度下降算法实现一维线性回归

最终,梯度下降的算法:

python 还原梯度下降算法实现一维线性回归

学习率一般小于1,当损失函数是0时,我们输出theta0和theta1.
接下来上代码!

class LinearRegression():

  def __init__(self, data, theta0, theta1, learning_rate):
    self.data = data
    self.theta0 = theta0
    self.theta1 = theta1
    self.learning_rate = learning_rate
    self.length = len(data)

  # hypothesis
  def h_theta(self, x):
    return self.theta0 + self.theta1 * x

  # cost function
  def J(self):
    temp = 0
    for i in range(self.length):
      temp += pow(self.h_theta(self.data[i][0]) - self.data[i][1], 2)
    return 1 / (2 * self.m) * temp

  # partial derivative
  def pd_theta0_J(self):
    temp = 0
    for i in range(self.length):
      temp += self.h_theta(self.data[i][0]) - self.data[i][1]
    return 1 / self.m * temp

  def pd_theta1_J(self):
    temp = 0
    for i in range(self.length):
      temp += (self.h_theta(data[i][0]) - self.data[i][1]) * self.data[i][0]
    return 1 / self.m * temp

  # gradient descent
  def gd(self):
    min_cost = 0.00001
    round = 1
    max_round = 10000
    while min_cost < abs(self.J()) and round <= max_round:
      self.theta0 = self.theta0 - self.learning_rate * self.pd_theta0_J()
      self.theta1 = self.theta1 - self.learning_rate * self.pd_theta1_J()

      print('round', round, ':\t theta0=%.16f' % self.theta0, '\t theta1=%.16f' % self.theta1)
      round += 1
    return self.theta0, self.theta1

def main():
	data = [[1, 2], [2, 5], [4, 8], [5, 9], [8, 15]] # 这里换成你想拟合的数[x, y]
	 # plot scatter
  x = []
  y = []
  for i in range(len(data)):
    x.append(data[i][0])
    y.append(data[i][1])
  plt.scatter(x, y)

  # gradient descent
  linear_regression = LinearRegression(data, theta0, theta1, learning_rate)
  theta0, theta1 = linear_regression.gd()

  # plot returned linear
  x = np.arange(0, 10, 0.01)
  y = theta0 + theta1 * x
  plt.plot(x, y)
  plt.show()

到此这篇关于python 还原梯度下降算法实现一维线性回归 的文章就介绍到这了,更多相关python 一维线性回归 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
简单谈谈Python中的闭包
Nov 30 Python
Python简单实现Base64编码和解码的方法
Apr 29 Python
Python标准库sched模块使用指南
Jul 06 Python
PyQt 线程类 QThread使用详解
Jul 16 Python
python环形单链表的约瑟夫问题详解
Sep 27 Python
对python打乱数据集中X,y标签对的方法详解
Dec 14 Python
Python读取stdin方法实例
May 24 Python
python调用自定义函数的实例操作
Jun 26 Python
Python多线程及其基本使用方法实例分析
Oct 29 Python
pytorch标签转onehot形式实例
Jan 02 Python
Django windows使用Apache实现部署流程解析
Oct 12 Python
10张动图学会python循环与递归问题
Feb 06 Python
利用Pycharm + Django搭建一个简单Python Web项目的步骤
Oct 22 #Python
python处理写入数据代码讲解
Oct 22 #Python
基于Python爬取股票数据过程详解
Oct 21 #Python
OpenCV利用python来实现图像的直方图均衡化
Oct 21 #Python
Python实现手势识别
Oct 21 #Python
利用Python优雅的登录校园网
Oct 21 #Python
python 使用三引号时容易犯的小错误
Oct 21 #Python
You might like
PHP生成唯一订单号的方法汇总
2015/04/16 PHP
PHP大神的十大优良习惯
2016/09/14 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
基于jquery的滚动条滚动固定div(附演示下载)
2012/10/29 Javascript
javascript的渐进增强与平稳退化浅谈
2013/11/12 Javascript
PHP配置文件php.ini中打开错误报告的设置方法
2015/01/09 PHP
通过js获取上传的图片信息(临时保存路径,名称,大小)然后通过ajax传递给后端的方法
2015/10/01 Javascript
jquery实现树形菜单完整代码
2015/12/29 Javascript
分享10个优化代码的CSS和JavaScript工具
2016/05/11 Javascript
Bootstrap插件全集
2016/07/18 Javascript
Javascript动画效果(3)
2016/10/11 Javascript
DropDownList实现可输入可选择(两种版本可选)
2016/12/07 Javascript
JS 组件系列之Bootstrap Table的冻结列功能彻底解决高度问题
2017/06/30 Javascript
利用10行js代码实现上下滚动公告效果
2017/12/08 Javascript
jQuery实现页码跳转式动态数据分页
2017/12/31 jQuery
20行JS代码实现粘贴板复制功能
2018/02/06 Javascript
jQuery插件jsonview展示json数据
2018/05/26 jQuery
详解js 创建对象的几种方法
2019/03/08 Javascript
vue项目中将element-ui table表格写成组件的实现代码
2019/06/12 Javascript
React组件对子组件children进行加强的方法
2019/06/23 Javascript
小程序中的箭头函数的具体使用
2020/06/19 Javascript
JavaScript 中的执行上下文和执行栈实例讲解
2021/02/25 Javascript
跟老齐学Python之让人欢喜让人忧的迭代
2014/10/02 Python
简单的抓取淘宝图片的Python爬虫
2014/12/25 Python
ubuntu中配置pyqt4环境教程
2017/12/27 Python
selenium+python环境配置教程详解
2019/05/28 Python
python 应用之Pycharm 新建模板默认添加编码格式-作者-时间等信息【推荐】
2019/06/17 Python
Python Pandas数据结构简单介绍
2019/07/03 Python
python爬虫中多线程的使用详解
2019/09/23 Python
详解win10下pytorch-gpu安装以及CUDA详细安装过程
2021/01/28 Python
html5 canvas手势解锁源码分享
2020/01/07 HTML / CSS
介绍一下木马病毒的种类
2015/07/26 面试题
大学生就业意向书范文
2014/04/01 职场文书
会计主管岗位职责
2015/04/02 职场文书
致男子1500米运动员的广播稿
2019/11/08 职场文书
详解Redis在SpringBoot工程中的综合应用
2021/10/16 Redis