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 20 Python
Python虚拟环境Virtualenv使用教程
May 18 Python
Python基于sftp及rsa密匙实现远程拷贝文件的方法
Sep 21 Python
Python学习小技巧之利用字典的默认行为
May 20 Python
Python多进程multiprocessing用法实例分析
Aug 18 Python
python检索特定内容的文本文件实例
Jun 05 Python
python下载微信公众号相关文章
Feb 26 Python
使用 Python 玩转 GitHub 的贡献板(推荐)
Apr 04 Python
Python Pandas对缺失值的处理方法
Sep 27 Python
python写一个随机点名软件的实例
Nov 28 Python
Python实现线性判别分析(LDA)的MATLAB方式
Dec 09 Python
Python如何使用ElementTree解析xml
Oct 12 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 身份证号验证函数
2009/05/07 PHP
编译php 5.2.14+fpm+memcached(具体操作详解)
2013/06/18 PHP
基于jquery的页面划词搜索JS
2010/09/14 Javascript
ASP.NET jQuery 实例16 通过控件CustomValidator验证RadioButtonList
2012/02/03 Javascript
仿当当网淘宝网等主流电子商务网站商品分类导航菜单
2013/09/25 Javascript
javascript中sort() 方法使用详解
2015/08/30 Javascript
jquery实现最简单的滑动菜单效果代码
2015/09/12 Javascript
JavaScript中的原始值和复杂值
2016/01/07 Javascript
JavaScript电子时钟倒计时第二款
2016/01/10 Javascript
EasyUI在表单提交之前进行验证的实例代码
2016/06/24 Javascript
JS判断输入字符串长度实例代码(汉字算两个字符,字母数字算一个)
2016/08/02 Javascript
jQuery如何解决IE输入框不能输入的问题
2016/10/08 Javascript
AngularJS中run方法的巧妙运用
2017/01/04 Javascript
微信小程序 MD5的方法详解及实例代码
2017/03/10 Javascript
JS实现匀加速与匀减速运动的方法示例
2017/09/04 Javascript
微信小程序图片轮播组件gallery slider使用方法详解
2018/01/31 Javascript
Vue商品控件与购物车联动效果的实例代码
2019/07/21 Javascript
uniapp实现横向滚动选择日期
2020/10/21 Javascript
React服务端渲染原理解析与实践
2021/03/04 Javascript
Windows和Linux下使用Python访问SqlServer的方法介绍
2015/03/10 Python
Python实现按当前日期(年、月、日)创建多级目录的方法
2018/04/26 Python
python引入不同文件夹下的自定义模块方法
2018/10/27 Python
对python多线程与global变量详解
2018/11/09 Python
浅谈python实现Google翻译PDF,解决换行的问题
2018/11/28 Python
对PyQt5中树结构的实现方法详解
2019/06/17 Python
10个Python面试常问的问题(小结)
2019/11/20 Python
python实现翻译word表格小程序
2020/02/27 Python
Python简单实现词云图代码及步骤解析
2020/06/04 Python
python退出循环的方法
2020/06/18 Python
CSS3的calc()做响应模式布局的实现方法
2017/09/06 HTML / CSS
瑞典轮胎在线:Tirendo.se
2018/06/21 全球购物
伦敦著名的运动鞋综合商店:Footpatrol
2019/03/25 全球购物
倡议书格式
2014/04/14 职场文书
超市优秀员工事迹材料
2014/05/01 职场文书
2014年行政后勤工作总结
2014/12/06 职场文书
中国文明网2015年“向国旗敬礼”活动网上签名寄语
2015/09/24 职场文书