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 18 Python
用Python3创建httpServer的简单方法
Jun 04 Python
python pandas 如何替换某列的一个值
Jun 09 Python
Python 将Matrix、Dict保存到文件的方法
Oct 30 Python
Tensorflow实现神经网络拟合线性回归
Jul 19 Python
Python数学形态学实例分析
Sep 06 Python
python提取xml里面的链接源码详解
Oct 15 Python
python3连接MySQL8.0的两种方式
Feb 17 Python
基于Python绘制个人足迹地图
Jun 01 Python
如何使用python写截屏小工具
Sep 29 Python
使用Python爬虫爬取小红书完完整整的全过程
Jan 19 Python
python数字类型和占位符详情
Mar 13 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
xml+php动态载入与分页
2006/10/09 PHP
PHP生成json和xml类型接口数据格式
2015/05/17 PHP
Thinkphp 框架基础之源码获取、环境要求与目录结构分析
2020/04/27 PHP
如何快速的呈现我们的网页的技巧整理
2007/07/01 Javascript
jquery imgareaselect 使用利用js与程序结合实现图片剪切
2009/07/30 Javascript
jQuery版Tab标签切换
2011/03/16 Javascript
JavaScript面向对象(极简主义法minimalist approach)
2012/07/17 Javascript
有关jquery与DOM节点操作方法和属性记录
2016/04/15 Javascript
js实现千分符和保留几位小数的简单实例
2016/08/01 Javascript
Bootstrap框架的学习教程详解(二)
2016/10/18 Javascript
详解Angularjs在控制器(controller.js)中使用过滤器($filter)格式化日期/时间实例
2017/02/17 Javascript
RequireJs的使用详解
2017/02/19 Javascript
原生node.js案例--前后台交互
2017/02/20 Javascript
JS实现二叉查找树的建立以及一些遍历方法实现
2017/04/17 Javascript
JavaScript输入框字数实时统计更新
2017/06/17 Javascript
js中比较两个对象是否相同的方法示例
2019/09/02 Javascript
[07:27]DOTA2卡尔工作室 英雄介绍水晶室女篇
2013/06/21 DOTA
Python3基础之基本运算符概述
2014/08/13 Python
python获得两个数组交集、并集、差集的方法
2015/03/27 Python
Python全局变量操作详解
2015/04/14 Python
Python生成随机数组的方法小结
2017/04/15 Python
解决pycharm界面不能显示中文的问题
2018/05/23 Python
Python HTML解析器BeautifulSoup用法实例详解【爬虫解析器】
2019/04/05 Python
python并发编程多进程之守护进程原理解析
2019/08/20 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
2019/08/30 Python
Python爬虫爬取糗事百科段子实例分享
2020/07/31 Python
selenium切换标签页解决get超时问题的完整代码
2020/08/30 Python
python lambda的使用详解
2021/02/26 Python
HTML5之SVG 2D入门4—笔画与填充
2013/01/30 HTML / CSS
美国著名的婴儿学步鞋老品牌:Robeez
2016/08/20 全球购物
考核工作实施方案
2014/03/30 职场文书
幼儿园新年寄语
2014/04/03 职场文书
摄影展策划方案
2014/06/02 职场文书
在宿舍喝酒的检讨书
2014/09/28 职场文书
Django cookie和session的应用场景及如何使用
2021/04/29 Python
Python制作动态字符画的源码
2021/08/04 Python