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启动办公软件进程(word、excel、ppt、以及wps的et、wps、wpp)
Apr 09 Python
Python 含参构造函数实例详解
May 25 Python
详解Python进程间通信之命名管道
Aug 28 Python
利用python编写一个图片主色转换的脚本
Dec 07 Python
PyQt5每天必学之日历控件QCalendarWidget
Apr 19 Python
用pandas中的DataFrame时选取行或列的方法
Jul 11 Python
基于python3实现socket文件传输和校验
Jul 28 Python
Python进程间通信Queue消息队列用法分析
May 22 Python
django的auth认证,authenticate和装饰器功能详解
Jul 25 Python
Python实现快速排序的方法详解
Oct 25 Python
Python数据持久化存储实现方法分析
Dec 21 Python
python os模块常用的29种方法使用详解
Jun 02 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
syphon 虹吸式咖啡冲泡冲煮倒水的得与失
2021/03/03 冲泡冲煮
如何使用php输出时间格式
2013/08/31 PHP
thinkPHP删除前弹出确认框的简单实现方法
2016/05/16 PHP
php实现多维数组排序的方法示例
2017/03/23 PHP
JavaScript 弹出窗体点击按钮返回选择数据的实现
2010/04/01 Javascript
js对象与打印对象分析比较
2013/04/23 Javascript
JS正则表达式验证数字代码
2014/01/28 Javascript
jQuery实现的动态伸缩导航菜单实例
2015/05/07 Javascript
jQuery中常用的遍历函数用法实例总结
2015/09/01 Javascript
javascript实现tab切换的两个实例
2015/11/05 Javascript
ES6新特性之Object的变化分析
2017/03/31 Javascript
微信小程序开发之toast提示插件使用示例
2017/06/08 Javascript
JavaScript ES6中const、let与var的对比详解
2017/06/18 Javascript
创建简单的node服务器实例(分享)
2017/06/23 Javascript
浅谈JavaScript的innerWidth与innerHeight
2017/10/12 Javascript
Vue的移动端多图上传插件vue-easy-uploader的示例代码
2017/11/27 Javascript
ES6 对象的新功能与解构赋值介绍
2019/02/05 Javascript
vue 实现微信浮标效果
2019/09/01 Javascript
vue 页面回退mounted函数不执行的解决方案
2020/07/26 Javascript
Python进程通信之匿名管道实例讲解
2015/04/11 Python
Python列表推导式、字典推导式与集合推导式用法实例分析
2018/02/07 Python
pandas值替换方法
2018/07/10 Python
selenium+python实现1688网站验证码图片的截取功能
2018/08/14 Python
Python3实现爬虫爬取赶集网列表功能【基于request和BeautifulSoup模块】
2018/12/05 Python
基于PyQt4和PySide实现输入对话框效果
2019/02/27 Python
Python学习笔记之Break和Continue用法分析
2019/08/14 Python
python深copy和浅copy区别对比解析
2019/12/26 Python
Python使用tkinter实现摇骰子小游戏功能的代码
2020/07/02 Python
基于CSS3实现图片模糊过滤效果
2015/11/19 HTML / CSS
员工评语大全
2014/01/19 职场文书
校园安全检查制度
2014/02/03 职场文书
优秀管理者获奖感言
2014/02/17 职场文书
文艺晚会策划方案
2014/06/11 职场文书
幼儿园老师个人总结
2015/02/28 职场文书
《钢铁是怎样炼成的》高中读后感
2019/08/07 职场文书
使用Redis实现分布式锁的方法
2022/06/16 Redis