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基础教程之lambda表达式使用方法
Feb 12 Python
python协程用法实例分析
Jun 04 Python
python编程羊车门问题代码示例
Oct 25 Python
简单了解python 生成器 列表推导式 生成器表达式
Aug 22 Python
python实现监控阿里云账户余额功能
Dec 16 Python
matplotlib基础绘图命令之imshow的使用
Aug 13 Python
通过代码实例了解Python sys模块
Sep 14 Python
Python通过yagmail实现发送邮件代码解析
Oct 27 Python
Python3自带工具2to3.py 转换 Python2.x 代码到Python3的操作
Mar 03 Python
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
Jun 05 Python
Python List remove()实例用法详解
Aug 02 Python
详解Golang如何实现支持随机删除元素的堆
Sep 23 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
MySQL的FIND_IN_SET函数使用方法分享
2012/03/27 PHP
php中单个数据库字段多列显示(单字段分页、横向输出)
2014/07/28 PHP
PHP获取文件行数的方法
2015/06/10 PHP
运用Windows XP附带的Msicuu.exe、Msizap.exe来彻底卸载顽固程序
2007/04/21 Javascript
javascript cookie操作类的实现代码小结附使用方法
2010/06/02 Javascript
JS代码判断IE6,IE7,IE8,IE9的函数代码
2013/08/02 Javascript
细说javascript函数从函数的构成开始
2013/08/29 Javascript
全面理解面向对象的 JavaScript(来自ibm)
2013/11/10 Javascript
JavaScript的类型、值和变量小结
2015/07/09 Javascript
js实现的简单radio背景颜色选择器代码
2015/08/18 Javascript
跟我学习javascript的垃圾回收机制与内存管理
2015/11/23 Javascript
快速掌握Node.js模块封装及使用
2016/03/21 Javascript
Bootstrap3.0建站教程(一)之bootstrap表单元素排版
2016/06/01 Javascript
JavaScript实现简单生成随机颜色的方法
2017/09/21 Javascript
Vue表单之v-model绑定下拉列表功能
2019/05/14 Javascript
JavaScript canvas实现雪花随机动态飘落
2020/02/08 Javascript
解决vue里a标签值解析变量,跳转页面,前面加默认域名端口的问题
2020/07/22 Javascript
Python实现批量把SVG格式转成png、pdf格式的代码分享
2014/08/21 Python
Django ManyToManyField 跨越中间表查询的方法
2018/12/18 Python
python opencv根据颜色进行目标检测的方法示例
2020/01/15 Python
tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this T
2020/06/22 Python
Python 实现RSA加解密文本文件
2020/12/30 Python
matplotlib自定义鼠标光标坐标格式的实现
2021/01/08 Python
稀有和绝版书籍:Biblio.com
2017/02/02 全球购物
Otticanet澳大利亚:最顶尖的世界名牌眼镜, 能得到打折季的价格
2018/08/23 全球购物
Anya Hindmarch官网:奢侈设计师手袋及配饰
2018/11/15 全球购物
Linux开机引导的步骤是什么
2015/10/19 面试题
网上常见的一份Linux面试题(多项选择部分)
2014/09/09 面试题
Java程序员面试90题
2013/10/19 面试题
高中自我评价分享
2013/12/05 职场文书
小学毕业典礼主持词
2014/03/27 职场文书
解除劳动关系协议书范文
2014/09/11 职场文书
大学生考试作弊被抓检讨书
2014/12/27 职场文书
MySQL数据库10秒内插入百万条数据的实现
2021/11/01 MySQL
MySQL数据库如何给表设置约束详解
2022/03/13 MySQL
MySQL 原理优化之Group By的优化技巧
2022/08/14 MySQL