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脚本实现自动发带图的微博
Apr 27 Python
利用python编写一个图片主色转换的脚本
Dec 07 Python
分析Python中解析构建数据知识
Jan 20 Python
python实现词法分析器
Jan 31 Python
Python实现 PS 图像调整中的亮度调整
Jun 28 Python
Python使用scrapy爬取阳光热线问政平台过程解析
Aug 14 Python
sklearn-SVC实现与类参数详解
Dec 10 Python
Python Merge函数原理及用法解析
Sep 16 Python
Scrapy-Redis之RedisSpider与RedisCrawlSpider详解
Nov 18 Python
Python关于拓扑排序知识点讲解
Jan 04 Python
Python实现简单的2048小游戏
Mar 01 Python
用python基于appium模块开发一个自动收取能量的小助手
Sep 25 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 上传功能实例代码
2010/04/13 PHP
用PHP代码在网页上生成图片
2015/07/01 PHP
jquery 简单图片导航插件jquery.imgNav.js
2010/03/17 Javascript
事件模型在各浏览器中存在差异
2010/10/20 Javascript
DIV+CSS+JS不间断横向滚动实现代码
2013/03/19 Javascript
IE6 hack for js 集锦
2014/09/23 Javascript
基于NodeJS的前后端分离的思考与实践(三)轻量级的接口配置建模框架
2014/09/26 NodeJs
js生成验证码并直接在前端判断
2015/05/15 Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
2016/02/26 Javascript
JavaScript代码生成PDF文件的方法
2016/02/26 Javascript
jQuery实现定位滚动条位置
2016/08/05 Javascript
Webpack性能优化 DLL 用法详解
2017/08/10 Javascript
javascript 作用于作用域链的详解
2017/09/27 Javascript
js实现rem自动匹配计算font-size的示例
2017/11/18 Javascript
关于vue状态过渡transition不起作用的原因解决
2019/04/09 Javascript
js继承的这6种方式!(上)
2019/04/23 Javascript
js实现无刷新监听URL的变化示例代码详解
2020/06/03 Javascript
JS script脚本中async和defer区别详解
2020/06/24 Javascript
Python实现读取目录所有文件的文件名并保存到txt文件代码
2014/11/22 Python
用pickle存储Python的原生对象方法
2017/04/28 Python
Django 生成登陆验证码代码分享
2017/12/12 Python
python 解决flask 图片在线浏览或者直接下载的问题
2020/01/09 Python
深入浅析python变量加逗号,的含义
2020/02/22 Python
PyTorch如何搭建一个简单的网络
2020/08/24 Python
python按照list中字典的某key去重的示例代码
2020/10/13 Python
CSS3教程:background-clip和background-origin
2008/10/17 HTML / CSS
京东国际站:JOYBUY
2017/11/23 全球购物
澳大利亚购买健身器材网站:Gym Direct
2019/12/19 全球购物
生物制药毕业生自荐信
2013/10/16 职场文书
《两只鸟蛋》教学反思
2014/02/10 职场文书
戒毒悔改检讨书
2014/09/21 职场文书
就业协议书范本
2014/10/08 职场文书
任命书格式模板
2015/09/22 职场文书
小学三年级语文教学反思
2016/03/03 职场文书
民事调解协议书
2016/03/21 职场文书
vue3如何优雅的实现移动端登录注册模块
2021/03/29 Vue.js