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 相关文章推荐
java直接调用python脚本的例子
Feb 16 Python
python之wxPython菜单使用详解
Sep 28 Python
Python中使用glob和rmtree删除目录子目录及所有文件的例子
Nov 21 Python
python MySQLdb Windows下安装教程及问题解决方法
May 09 Python
python实现学生信息管理系统
Apr 05 Python
python3+PyQt5+Qt Designer实现扩展对话框
Apr 20 Python
python计算两个地址之间的距离方法
Jun 09 Python
Python实现的从右到左字符串替换方法示例
Jul 06 Python
python write无法写入文件的解决方法
Jan 23 Python
python Manager 之dict KeyError问题的解决
Dec 21 Python
Python AutoCAD 系统设置的实现方法
Apr 01 Python
Pyinstaller打包Scrapy项目的实现步骤
Sep 22 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分页类代码
2013/04/02 PHP
PHP统计nginx访问日志中的搜索引擎抓取404链接页面路径
2014/06/30 PHP
Laravel+jQuery实现AJAX分页效果
2016/09/14 PHP
php mysql_real_escape_string addslashes及mysql绑定参数防SQL注入攻击
2016/12/23 PHP
jquery-easyui关闭tab自动切换到前一个tab
2010/07/29 Javascript
js实现字符串的16进制编码不加密
2014/04/25 Javascript
jquery validate和jquery form 插件组合实现验证表单后AJAX提交
2015/08/26 Javascript
js编写贪吃蛇的小游戏
2020/08/24 Javascript
jQuery弹出下拉列表插件(实现kindeditor的@功能)
2016/08/16 Javascript
基于jQuery实现火焰灯效果导航菜单
2017/01/04 Javascript
node.js文件上传重命名以及移动位置的示例代码
2018/01/19 Javascript
ExtJs整合Echarts的示例代码
2018/02/27 Javascript
微信小程序中实现手指缩放图片的示例代码
2018/03/13 Javascript
vue实现类似淘宝商品评价页面星级评价及上传多张图片功能
2018/10/29 Javascript
vue实现自定义日期组件功能的实例代码
2018/11/06 Javascript
Vue 报错TypeError: this.$set is not a function 的解决方法
2018/12/17 Javascript
vue使用自定义指令实现拖拽
2021/01/29 Javascript
解决vue项目中某一页面不想引用公共组件app.vue的问题
2020/08/14 Javascript
绘制微信小程序验证码功能的实例代码
2021/01/05 Javascript
python单线程实现多个定时器示例
2014/03/30 Python
python自动化测试之setUp与tearDown实例
2014/09/28 Python
python定时检查某个进程是否已经关闭的方法
2015/05/20 Python
Python中super函数的用法
2017/11/17 Python
对python文件读写的缓冲行为详解
2019/02/13 Python
Django Admin中增加导出CSV功能过程解析
2019/09/04 Python
Python time库基本使用方法分析
2019/12/13 Python
Python startswith()和endswith() 方法原理解析
2020/04/28 Python
python判断正负数方式
2020/06/03 Python
Regatta官网:英国最受欢迎的户外服装和鞋类品牌
2019/05/01 全球购物
高一地理教学反思
2014/01/18 职场文书
十周年庆典策划方案
2014/06/03 职场文书
县政府领导班子“四风”方面突出问题整改措施
2014/09/23 职场文书
政风行风整改方案
2014/10/25 职场文书
前台接待岗位职责
2015/02/03 职场文书
2015最新婚礼司仪主持词
2015/06/30 职场文书
创业计划书之熟食店
2019/10/16 职场文书