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访问纯真IP数据库的代码
May 19 Python
50行代码实现贪吃蛇(具体思路及代码)
Apr 27 Python
11月编程语言排行榜 Python逆袭C#上升到第4
Nov 15 Python
代码分析Python地图坐标转换
Feb 08 Python
Python基于生成器迭代实现的八皇后问题示例
May 23 Python
python如何生成各种随机分布图
Aug 27 Python
python将字符串以utf-8格式保存在txt文件中的方法
Oct 30 Python
Python实现定时自动关闭的tkinter窗口方法
Feb 16 Python
python接口调用已训练好的caffe模型测试分类方法
Aug 26 Python
python适合做数据挖掘吗
Jun 16 Python
django rest framework使用django-filter用法
Jul 15 Python
Python实现机器学习算法的分类
Jun 03 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
探讨方法的重写(覆载)详解
2013/06/08 PHP
php中多维数组按指定value排序的实现代码
2014/08/19 PHP
php中二维数组排序问题方法详解
2015/08/28 PHP
JS跨域总结
2012/08/30 Javascript
JQuery中SetTimeOut传参问题探讨
2013/05/10 Javascript
JQuery给元素绑定click事件多次执行的解决方法
2014/05/29 Javascript
javascript中clone对象详解
2014/12/03 Javascript
javascript删除一个html元素节点的方法
2014/12/20 Javascript
纯js实现无限空间大小的本地存储
2015/06/18 Javascript
JavaScript多图片上传案例
2015/09/28 Javascript
浅谈js数据类型判断与数组判断
2016/08/29 Javascript
谈谈JavaScript中浏览器兼容问题的写法小议
2016/12/17 Javascript
原生js仿浏览器滚动条效果
2017/03/02 Javascript
AngularJS的脏检查深入分析
2017/04/22 Javascript
jQuery validata插件实现方法
2017/06/25 jQuery
JQuery和html+css实现带小圆点和左右按钮的轮播图实例
2017/07/22 jQuery
优雅的使用javascript递归画一棵结构树示例代码
2019/09/22 Javascript
跟老齐学Python之Import 模块
2014/10/13 Python
centos6.4下python3.6.1安装教程
2017/07/21 Python
Python操作MySQL数据库的两种方式实例分析【pymysql和pandas】
2019/03/18 Python
python如果快速判断数字奇数偶数
2019/11/13 Python
Django表单提交后实现获取相同name的不同value值
2020/05/14 Python
Django用内置方法实现简单搜索功能的方法
2020/12/18 Python
html5简介_动力节点Java学院整理
2017/07/07 HTML / CSS
怎么可以提高数据库查询数据的速度
2014/06/28 面试题
专题组织生活会方案
2014/06/15 职场文书
教师竞聘上岗演讲稿
2014/09/03 职场文书
公司合并协议书范本
2014/09/30 职场文书
教师自查自纠材料
2014/10/14 职场文书
文明单位汇报材料
2014/12/24 职场文书
房产公证书格式
2015/01/26 职场文书
工程项目经理岗位职责
2015/02/02 职场文书
2015年教研组工作总结
2015/05/04 职场文书
JVM入门之类加载与字节码技术(类加载与类的加载器)
2021/06/15 Java/Android
Redis 限流器
2022/05/15 Redis
Python可视化神器pyecharts绘制地理图表
2022/07/07 Python