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 输出一个两行字符的变量
Feb 05 Python
python+pyqt实现12306图片验证效果
Oct 25 Python
python tensorflow学习之识别单张图片的实现的示例
Feb 09 Python
PyQT实现多窗口切换
Apr 20 Python
Python3基于sax解析xml操作示例
May 22 Python
用python实现k近邻算法的示例代码
Sep 06 Python
pytorch 输出中间层特征的实例
Aug 17 Python
tensorflow如何批量读取图片
Aug 29 Python
解决pycharm 安装numpy失败的问题
Dec 05 Python
Python openpyxl模块原理及用法解析
Jan 19 Python
python小程序之4名牌手洗牌发牌问题解析
May 15 Python
Python数据可视化常用4大绘图库原理详解
Oct 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
phpMyAdmin出现无法载入 mcrypt 扩展,请检查PHP配置的解决方法
2012/03/26 PHP
PHP基于SimpleXML生成和解析xml的方法示例
2017/07/17 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
2017/12/25 PHP
JavaScript编程开发中的五个实用小技巧
2010/07/22 Javascript
浅析Javascript中“==”与“===”的区别
2014/12/23 Javascript
学习JavaScript鼠标响应事件
2015/12/25 Javascript
JavaScript实现显示函数调用堆栈的方法
2016/04/21 Javascript
bootstrap3 dialog 更强大、更灵活的模态框
2017/04/20 Javascript
js canvas实现擦除效果示例代码
2017/04/26 Javascript
Nodejs进阶之服务端字符编解码和乱码处理
2017/09/04 NodeJs
JS数组去重的6种方法完整实例
2018/12/08 Javascript
小程序实现层叠卡片滑动效果
2019/08/26 Javascript
Taro小程序自定义顶部导航栏功能的实现
2020/12/17 Javascript
python测试驱动开发实例
2014/10/08 Python
Python中常见的数据类型小结
2015/08/29 Python
对pandas中时间窗函数rolling的使用详解
2018/11/28 Python
Python 虚拟空间的使用代码详解
2019/06/10 Python
python 和c++实现旋转矩阵到欧拉角的变换方式
2019/12/04 Python
基于Python和PyYAML读取yaml配置文件数据
2020/01/13 Python
vscode写python时的代码错误提醒和自动格式化的方法
2020/05/07 Python
解决pycharm 格式报错tabs和space不一致问题
2021/02/26 Python
英国领先的体验日提供商:Buyagift
2019/04/19 全球购物
IFCHIC台湾:欧美国际设计师品牌
2019/05/18 全球购物
《难忘的泼水节》教学反思
2014/02/27 职场文书
后勤主管岗位职责
2014/03/01 职场文书
美术教师岗位职责
2014/03/18 职场文书
经贸日语专业个人求职信范文
2014/04/29 职场文书
关于保护环境的建议书
2014/05/13 职场文书
党员四风问题对照检查材料
2014/09/27 职场文书
2014年财务人员工作总结
2014/11/11 职场文书
2014年财政工作总结
2014/12/10 职场文书
孔庙导游词
2015/02/04 职场文书
2015中学教学工作总结
2015/07/22 职场文书
公司中层管理培训心得体会
2016/01/11 职场文书
Python移位密码、仿射变换解密实例代码
2021/06/27 Python
springboot用户数据修改的详细实现
2022/04/06 Java/Android