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深入学习之闭包
Aug 31 Python
Python实现备份文件实例
Sep 16 Python
在Python中处理时间之clock()方法的使用
May 22 Python
Python编程中对文件和存储器的读写示例
Jan 25 Python
Python 中 list 的各项操作技巧
Apr 13 Python
Python 中的Selenium异常处理实例代码
May 03 Python
Python使用itertools模块实现排列组合功能示例
Jul 02 Python
python查看列的唯一值方法
Jul 17 Python
Python异常处理知识点总结
Feb 18 Python
python对常见数据类型的遍历解析
Aug 27 Python
使用Pytorch来拟合函数方式
Jan 14 Python
Python装饰器的练习题
Nov 23 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
Cappuccino 卡布其诺咖啡之制作
2021/03/03 冲泡冲煮
搜索和替换文件或目录的一个好类--很实用
2006/10/09 PHP
基于php split()函数的用法详解
2013/06/05 PHP
curl实现站外采集的方法和技巧
2014/01/31 PHP
php使用iconv中文截断问题的解决方法
2015/02/11 PHP
PHP实现将视频转成MP4并获取视频预览图的方法
2015/03/12 PHP
PHP基于单例模式编写PDO类的方法
2016/09/13 PHP
php获取数据库中数据的实现方法
2017/06/01 PHP
laravel 解决强制跳转 https的问题
2019/10/22 PHP
javascript 导出数据到Excel(处理table中的元素)
2009/12/18 Javascript
jQuery插件开发全解析
2012/10/10 Javascript
js控制页面的全屏展示和退出全屏显示的方法
2015/03/10 Javascript
JavaScript中的acos()方法使用详解
2015/06/14 Javascript
仅一个form表单 js实现注册信息依次填写提交功能
2016/06/12 Javascript
AngularJS入门教程之双向绑定详解
2016/08/18 Javascript
浅谈JQ中mouseover和mouseenter的区别
2016/09/13 Javascript
Base64(二进制)图片编码解析及在各种浏览器的兼容性处理
2017/02/09 Javascript
JS点击缩略图整屏居中放大图片效果
2017/07/04 Javascript
Angular 4.x+Ionic3踩坑之Ionic3.x pop反向传值详解
2018/03/13 Javascript
vue鼠标移入添加class样式,鼠标移出去除样式(active)实现方法
2018/08/22 Javascript
详解关于html,css,js三者的加载顺序问题
2019/04/10 Javascript
优雅的使用javascript递归画一棵结构树示例代码
2019/09/22 Javascript
Vue-Cli项目优化操作的实现
2019/10/27 Javascript
Nest.js 授权验证的方法示例
2021/02/22 Javascript
python中二维阵列的变换实例
2014/10/09 Python
Python 读取串口数据,动态绘图的示例
2019/07/02 Python
关于Python Tkinter Button控件command传参问题的解决方式
2020/03/04 Python
Pytorch 高效使用GPU的操作
2020/06/27 Python
Python使用for生成列表实现过程解析
2020/09/22 Python
Python之Sklearn使用入门教程
2021/02/19 Python
校园文化标语
2014/06/18 职场文书
股份转让协议书范本
2015/01/27 职场文书
行政经理岗位职责
2015/04/15 职场文书
2015年物资管理工作总结
2015/05/20 职场文书
SpringMVC 整合SSM框架详解
2021/08/30 Java/Android
十大冰系宝可梦排名,颜值最高的阿罗拉九尾,第三使用率第一
2022/03/18 日漫