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基于http下载视频或音频
Jun 20 Python
python实现将一个数组逆序输出的方法
Jun 25 Python
解决python中使用plot画图,图不显示的问题
Jul 04 Python
python消费kafka数据批量插入到es的方法
Dec 27 Python
Python英文文本分词(无空格)模块wordninja的使用实例
Feb 20 Python
Python如何爬取实时变化的WebSocket数据的方法
Mar 09 Python
pandas DataFrame索引行列的实现
Jun 04 Python
Python使用turtle库绘制小猪佩奇(实例代码)
Jan 16 Python
pycharm新建Vue项目的方法步骤(图文)
Mar 04 Python
python画图常规设置方式
Mar 05 Python
利用python汇总统计多张Excel
Sep 22 Python
Pandas 数据编码的十种方法
Apr 20 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
Windows下的PHP5.0详解
2006/11/18 PHP
php线性表顺序存储实现代码(增删查改)
2012/02/16 PHP
php实现单链表的实例代码
2013/03/22 PHP
解密ThinkPHP3.1.2版本之模板继承
2014/06/19 PHP
php开发时容易忘记的一些技术细节
2016/02/03 PHP
PHP商品秒杀问题解决方案实例详解【mysql与redis】
2019/07/22 PHP
php实现文件上传基本验证
2020/03/04 PHP
统一接口:为FireFox添加IE的方法和属性的js代码
2007/03/25 Javascript
浅析用prototype定义自己的方法
2013/11/14 Javascript
NodeJS url验证(url-valid)的使用方法
2013/11/18 NodeJs
jQuery实现级联菜单效果(仿淘宝首页菜单动画)
2014/04/10 Javascript
JavaScript和HTML DOM的区别与联系及Javascript和DOM的关系
2015/11/15 Javascript
EditPlus中的正则表达式 实战(4)
2016/12/15 Javascript
JavaScript中的遍历详解(多种遍历)
2017/04/07 Javascript
Promise.all中对于reject的处理方法
2018/08/01 Javascript
一步步教你利用Docker设置Node.js
2018/11/20 Javascript
js中this的指向问题归纳总结
2018/11/28 Javascript
[57:59]完美世界DOTA2联赛循环赛 Ink Ice vs LBZS BO2第一场 11.05
2020/11/05 DOTA
Python使用代理抓取网站图片(多线程)
2014/03/14 Python
Python3基础之基本运算符概述
2014/08/13 Python
Linux中Python 环境软件包安装步骤
2016/03/31 Python
python numpy函数中的linspace创建等差数列详解
2017/10/13 Python
Python 利用pydub库操作音频文件的方法
2019/01/09 Python
使用Pyhton 分析酒店针孔摄像头
2020/03/04 Python
HTML5 FileReader对象的具体使用方法
2020/05/22 HTML / CSS
芬兰攀岩、山地运动和户外活动用品购物网站:Bergfreunde
2016/10/06 全球购物
Jowissa官方网站:瑞士制造的手表,优雅简约的设计
2020/07/29 全球购物
先进党支部事迹材料
2014/01/13 职场文书
公司同意接收函
2014/01/13 职场文书
2014年三八妇女节活动总结
2014/03/01 职场文书
中班幼儿评语大全
2014/04/30 职场文书
关于环保的演讲稿
2014/05/10 职场文书
信息工作经验交流材料
2014/05/28 职场文书
乔布斯辞职信(中英文对照)
2015/05/12 职场文书
中秋节英文祝福语句(14句)
2019/09/11 职场文书
nginx sticky实现基于cookie负载均衡示例详解
2022/12/24 Servers