Python编程实现线性回归和批量梯度下降法代码实例


Posted in Python onJanuary 04, 2018

通过学习斯坦福公开课的线性规划和梯度下降,参考他人代码自己做了测试,写了个类以后有时间再去扩展,代码注释以后再加,作业好多:

import numpy as np
import matplotlib.pyplot as plt
import random

class dataMinning:
  datasets = []
  labelsets = []
  
  addressD = '' #Data folder
  addressL = '' #Label folder
  
  npDatasets = np.zeros(1)
  npLabelsets = np.zeros(1)
  
  cost = []
  numIterations = 0
  alpha = 0
  theta = np.ones(2)
  #pCols = 0
  #dRows = 0
  def __init__(self,addressD,addressL,theta,numIterations,alpha,datasets=None):
    if datasets is None:
      self.datasets = []
    else:
      self.datasets = datasets
    self.addressD = addressD
    self.addressL = addressL
    self.theta = theta
    self.numIterations = numIterations
    self.alpha = alpha
    
  def readFrom(self):
    fd = open(self.addressD,'r')
    for line in fd:
      tmp = line[:-1].split()
      self.datasets.append([int(i) for i in tmp])
    fd.close()
    self.npDatasets = np.array(self.datasets)

    fl = open(self.addressL,'r')
    for line in fl:
      tmp = line[:-1].split()
      self.labelsets.append([int(i) for i in tmp])
    fl.close()
    
    tm = []
    for item in self.labelsets:
      tm = tm + item
    self.npLabelsets = np.array(tm)

  def genData(self,numPoints,bias,variance):
    self.genx = np.zeros(shape = (numPoints,2))
    self.geny = np.zeros(shape = numPoints)

    for i in range(0,numPoints):
      self.genx[i][0] = 1
      self.genx[i][1] = i
      self.geny[i] = (i + bias) + random.uniform(0,1) * variance

  def gradientDescent(self):
    xTrans = self.genx.transpose() #
    i = 0
    while i < self.numIterations:
      hypothesis = np.dot(self.genx,self.theta)
      loss = hypothesis - self.geny
      #record the cost
      self.cost.append(np.sum(loss ** 2))
      #calculate the gradient
      gradient = np.dot(xTrans,loss)
      #updata, gradientDescent
      self.theta = self.theta - self.alpha * gradient
      i = i + 1
      
  
  def show(self):
    print 'yes'
    
if __name__ == "__main__":
  c = dataMinning('c:\\city.txt','c:\\st.txt',np.ones(2),100000,0.000005)
  c.genData(100,25,10)
  c.gradientDescent()
  cx = range(len(c.cost))
  plt.figure(1)
  plt.plot(cx,c.cost)
  plt.ylim(0,25000)
  plt.figure(2)
  plt.plot(c.genx[:,1],c.geny,'b.')
  x = np.arange(0,100,0.1)
  y = x * c.theta[1] + c.theta[0]
  plt.plot(x,y)
  plt.margins(0.2)
  plt.show()

Python编程实现线性回归和批量梯度下降法代码实例

图1. 迭代过程中的误差cost

Python编程实现线性回归和批量梯度下降法代码实例

图2. 数据散点图和解直线

总结

以上就是本文关于Python编程实现线性回归和批量梯度下降法代码实例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:

Python编程实现粒子群算法(PSO)详解

如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
python简单程序读取串口信息的方法
Mar 13 Python
Python中subprocess的简单使用示例
Jul 28 Python
深入学习Python中的装饰器使用
Jun 20 Python
Python 如何访问外围作用域中的变量
Sep 11 Python
python中将字典形式的数据循环插入Excel
Jan 16 Python
利用pandas将numpy数组导出生成excel的实例
Jun 14 Python
python用BeautifulSoup库简单爬虫实例分析
Jul 30 Python
Python3 导入上级目录中的模块实例
Feb 16 Python
python 实现多线程下载视频的代码
Nov 15 Python
python中前缀运算符 *和 **的用法示例详解
May 28 Python
Python小白不正确的使用类变量实例
May 29 Python
Python djanjo之csrf防跨站攻击实验过程
May 14 Python
Python语言描述随机梯度下降法
Jan 04 #Python
微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧
Jan 04 #Python
python使用xpath中遇到:到底是什么?
Jan 04 #Python
python使用itchat库实现微信机器人(好友聊天、群聊天)
Jan 04 #Python
python实现微信跳一跳辅助工具步骤详解
Jan 04 #Python
Python中实现最小二乘法思路及实现代码
Jan 04 #Python
Python找出最小的K个数实例代码
Jan 04 #Python
You might like
《PHP编程最快明白》第五讲:php目录、文件操作
2010/11/01 PHP
php数组函数序列之array_pop() - 删除数组中的最后一个元素
2011/11/07 PHP
php跨域cookie共享使用方法
2014/02/20 PHP
php获取网站百度快照日期的方法
2015/07/29 PHP
php模板引擎技术简单实现
2016/03/15 PHP
php通过各种函数判断0和空
2020/07/04 PHP
PHP安装memcache扩展的步骤讲解
2019/02/14 PHP
PHP 对象接口简单实现方法示例
2020/04/13 PHP
用javascript作一个通用向导说明
2011/08/30 Javascript
Javascript alert消息换行的方法
2013/08/07 Javascript
对于Form表单reset方法的新认识
2014/03/05 Javascript
jquery 绑定回车动作扑捉回车键触发的事件
2014/03/26 Javascript
javascript常用方法汇总
2014/12/02 Javascript
jQuery实现的图片分组切换焦点图插件
2015/01/06 Javascript
两行代码轻松搞定JavaScript日期验证
2016/08/03 Javascript
Angular2 组件间通过@Input @Output通讯示例
2017/08/24 Javascript
vue与bootstrap实现时间选择器的示例代码
2017/08/26 Javascript
微信小程序中setInterval的使用方法
2017/09/29 Javascript
在vscode里使用.vue代码模板的方法
2018/04/28 Javascript
解决angular2在双向数据绑定时[(ngModel)]无法使用的问题
2018/09/13 Javascript
JavaScript基于遍历操作实现对象深拷贝功能示例
2019/03/05 Javascript
vue仿ios列表左划删除
2019/09/26 Javascript
使用Python的turtle模块画图的方法
2017/11/15 Python
Python面向对象程序设计之继承与多继承用法分析
2018/07/13 Python
Python操作远程服务器 paramiko模块详细介绍
2019/08/07 Python
matplotlib绘制多个子图(subplot)的方法
2019/12/03 Python
解决Python发送Http请求时,中文乱码的问题
2020/04/30 Python
python用什么编辑器进行项目开发
2020/06/17 Python
html5 Canvas画图教程(5)—canvas里画曲线之arc方法
2013/01/09 HTML / CSS
Nike英国官网:Nike.com (UK)
2017/02/13 全球购物
股权转让协议书范本
2014/04/12 职场文书
树转促学习心得体会
2014/09/10 职场文书
道歉信怎么写
2015/05/12 职场文书
公司处罚决定书
2015/06/24 职场文书
导游词之山东八仙过海景区
2019/11/11 职场文书
MySQL图形化管理工具Navicat安装步骤
2021/12/04 MySQL