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 相关文章推荐
windows系统中python使用rar命令压缩多个文件夹示例
May 06 Python
用ReactJS和Python的Flask框架编写留言板的代码示例
Dec 19 Python
Python实现图片转字符画的示例代码
Aug 21 Python
Python决策树分类算法学习
Dec 22 Python
使用pandas的DataFrame的plot方法绘制图像的实例
May 24 Python
Python matplotlib以日期为x轴作图代码实例
Nov 22 Python
pytorch-RNN进行回归曲线预测方式
Jan 14 Python
Python实现图像的垂直投影示例
Jan 17 Python
python实现控制台输出彩色字体
Apr 05 Python
Python装饰器的应用场景代码总结
Apr 10 Python
Python实现手绘图效果实例分享
Jul 22 Python
PYTHON InceptionV3模型的复现详解
May 06 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语法(4)
2006/10/09 PHP
PHP include_path设置技巧分享
2011/07/03 PHP
php获取数组中重复数据的两种方法
2013/06/28 PHP
php switch语句多个值匹配同一代码块应用示例
2014/07/29 PHP
Yii框架关联查询with用法分析
2014/12/02 PHP
php数字每三位加逗号的功能函数
2015/10/22 PHP
Paypal实现循环扣款(订阅)功能
2017/03/23 PHP
浅谈JavaScript中面向对象技术的模拟
2006/09/25 Javascript
浅谈Javascript嵌套函数及闭包
2010/11/09 Javascript
使用js判断当前时区TimeZone是否是夏令时
2014/02/23 Javascript
JS删除字符串中重复字符方法
2014/03/09 Javascript
使用AJAX实现Web页面进度条的实例分享
2016/05/06 Javascript
JavaScript中数组Array方法详解
2017/02/27 Javascript
angular.js+node.js实现下载图片处理详解
2017/03/31 Javascript
JS 调试中常见的报错问题解决方法
2017/05/20 Javascript
微信小程序-滚动消息通知的实例代码
2017/08/03 Javascript
JS+WCF实现进度条实时监测数据加载量的方法详解
2017/12/19 Javascript
Javascript三种字符串连接方式及性能比较
2019/05/28 Javascript
vue+vant-UI框架实现购物车的复选框全选和反选功能
2019/11/05 Javascript
vue中echarts引入中国地图的案例
2020/07/28 Javascript
Python import用法以及与from...import的区别
2015/05/28 Python
Python中time模块与datetime模块在使用中的不同之处
2015/11/24 Python
Python字符串特性及常用字符串方法的简单笔记
2016/01/04 Python
深入学习Python中的上下文管理器与else块
2017/08/27 Python
python如何定义带参数的装饰器
2018/03/20 Python
Tensorflow 定义变量,函数,数值计算等名字的更新方式
2020/02/10 Python
Django中的session用法详解
2020/03/09 Python
超级实用的8个Python列表技巧
2020/08/24 Python
python 邮件检测工具mmpi的使用
2021/01/04 Python
荣耀俄罗斯官网:HONOR俄罗斯
2020/10/31 全球购物
公司活动总结怎么写
2014/06/25 职场文书
卖房授权委托书样本
2014/10/05 职场文书
网络营销计划书
2015/01/17 职场文书
大学开学感言
2015/08/01 职场文书
python数据分析之用sklearn预测糖尿病
2021/04/22 Python
Innodb存储引擎中的后台线程详解
2022/04/03 MySQL