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判断端口是否打开的实现代码
Feb 10 Python
Python中subprocess的简单使用示例
Jul 28 Python
django2 快速安装指南分享
Jan 05 Python
使用python和Django完成博客数据库的迁移方法
Jan 05 Python
python实现自动获取IP并发送到邮箱
Dec 26 Python
python模块之subprocess模块级方法的使用
Mar 26 Python
Python3.7 新特性之dataclass装饰器
May 27 Python
PyQt5创建一个新窗口的实例
Jun 20 Python
手把手教你pycharm专业版安装破解教程(linux版)
Sep 26 Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
Jun 10 Python
完美解决keras保存好的model不能成功加载问题
Jun 11 Python
基于Python-Pycharm实现的猴子摘桃小游戏(源代码)
Feb 20 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数据库密码的找回的步骤
2011/01/12 PHP
PHP积分兑换接口实例
2015/02/09 PHP
关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法
2010/11/30 Javascript
js下通过prototype扩展实现indexOf的代码
2010/12/08 Javascript
html超链接打开窗口大小的方法
2013/03/05 Javascript
用js实现table单元格高宽调整,兼容合并单元格(兼容IE6、7、8、FF)实例
2013/06/25 Javascript
关于Jquery操作Cookie取值错误的解决方法
2013/08/26 Javascript
浅谈Javascript 执行顺序
2013/12/18 Javascript
js实现图片和链接文字同步切换特效的方法
2015/02/20 Javascript
JavaScript开发Chrome浏览器扩展程序UI的教程
2016/05/16 Javascript
JS简单实现移动端日历功能示例
2016/12/28 Javascript
AngularJS 单选框及多选框的双向动态绑定
2017/04/20 Javascript
JavaScript门面模式详解
2017/10/19 Javascript
Node.js上传文件功能之服务端如何获取文件上传进度
2018/02/05 Javascript
vue-lazyload图片延迟加载插件的实例讲解
2018/02/09 Javascript
p5.js入门教程之键盘交互
2018/03/19 Javascript
详解Vue-cli中的静态资源管理(src/assets和static/的区别)
2018/06/19 Javascript
微信小程序用户授权,以及判断登录是否过期的方法
2019/05/10 Javascript
基于canvasJS在PHP中制作动态图表
2020/05/30 Javascript
详解vue组件之间的通信
2020/08/30 Javascript
[01:24]2014DOTA2 TI第二日 YYF表示这届谁赢都有可能
2014/07/11 DOTA
python批量下载图片的三种方法
2013/04/22 Python
Java多线程编程中ThreadLocal类的用法及深入
2016/06/21 Python
Python3 获取一大段文本之间两个关键字之间的内容方法
2018/10/11 Python
Python小游戏之300行代码实现俄罗斯方块
2019/01/04 Python
Python txt文件加入字典并查询的方法
2019/01/15 Python
Django与pyecharts结合的实例代码
2020/05/13 Python
应届生程序员求职信
2013/11/05 职场文书
就业自荐信
2013/12/04 职场文书
俞敏洪励志演讲稿
2014/04/29 职场文书
优质服务活动实施方案
2014/05/02 职场文书
2014国庆节商场促销活动策划方案
2014/09/16 职场文书
思想政治表现评语
2015/01/04 职场文书
田径运动会通讯稿
2015/07/18 职场文书
python b站视频下载的五种版本
2021/05/27 Python
详解thinkphp的Auth类认证
2021/05/28 PHP