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 相关文章推荐
Python2.5/2.6实用教程 入门基础篇
Nov 29 Python
python抓取网页内容示例分享
Feb 24 Python
Python操作sqlite3快速、安全插入数据(防注入)的实例
Apr 26 Python
Python里隐藏的“禅”
Jun 16 Python
Python判断操作系统类型代码分享
Nov 22 Python
rabbitmq(中间消息代理)在python中的使用详解
Dec 14 Python
简单谈谈python中的lambda表达式
Jan 19 Python
异步任务队列Celery在Django中的使用方法
Jun 07 Python
python多线程并发实例及其优化
Jun 27 Python
pandas将多个dataframe以多个sheet的形式保存到一个excel文件中
Oct 10 Python
基于Python实现ComicReaper漫画自动爬取脚本过程解析
Nov 11 Python
解决Python字典查找报Keyerror的问题
May 26 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通过排列组合实现1到9数字相加都等于20的方法
2015/08/03 PHP
关于php中一些字符串总结
2016/05/05 PHP
屏蔽PHP默认设置中的Notice警告的方法
2016/05/20 PHP
CentOS7编译安装php7.1的教程详解
2019/04/18 PHP
JavaScript入门教程 Cookies
2009/01/31 Javascript
通过javascript设置css属性的代码
2009/12/28 Javascript
JavaScript 学习笔记(十五)
2010/01/28 Javascript
javascript document.compatMode兼容性
2010/02/23 Javascript
如何让div span等元素能响应键盘事件操作指南
2012/11/13 Javascript
浅谈JavaScript正则表达式分组匹配
2015/04/10 Javascript
AngularJS进行性能调优的7个建议
2015/12/28 Javascript
AngularJS自动表单验证
2016/02/01 Javascript
AngularJS 自定义指令详解及示例代码
2016/08/17 Javascript
微信JS-SDK自定义分享功能实例详解【分享给朋友/分享到朋友圈】
2016/11/25 Javascript
BootStrap 表单控件之单选按钮水平排列
2017/05/23 Javascript
简单实现js进度条加载效果
2020/03/25 Javascript
HTML5开发Kinect体感游戏的实例应用
2017/09/18 Javascript
Vue.js在数组中插入重复数据的实现代码
2017/11/17 Javascript
微信小程序按钮点击动画效果的实现
2019/09/04 Javascript
js实现二级联动简单实例
2020/01/11 Javascript
vue监听浏览器原生返回按钮,进行路由转跳操作
2020/09/09 Javascript
[49:08]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
python实时分析日志的一个小脚本分享
2017/05/07 Python
Python使用三种方法实现PCA算法
2017/12/12 Python
浅谈python requests 的put, post 请求参数的问题
2019/01/02 Python
python使用pandas抽样训练数据中某个类别实例
2020/02/28 Python
python argparse模块通过后台传递参数实例
2020/04/20 Python
详解numpy1.19.4与python3.9版本冲突解决
2020/12/15 Python
Python读取pdf表格写入excel的方法
2021/01/22 Python
德国自行车商店:Tretwerk
2019/06/21 全球购物
实习销售业务员自我鉴定
2013/09/21 职场文书
单位在职证明范本
2014/01/09 职场文书
教师节宣传方案
2014/05/23 职场文书
孝敬父母的活动方案
2014/08/28 职场文书
员工工作能力评语
2014/12/31 职场文书
JavaWeb实现显示mysql数据库数据
2022/03/19 Java/Android