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 线程池threadpool之实现
Nov 17 Python
快速解决安装python没有scripts文件夹的问题
Apr 03 Python
python使用xlrd和xlwt读写Excel文件的实例代码
Sep 05 Python
Python单元和文档测试实例详解
Apr 11 Python
python利用多种方式来统计词频(单词个数)
May 27 Python
python,Django实现的淘宝客登录功能示例
Jun 12 Python
python networkx 根据图的权重画图实现
Jul 10 Python
手把手教你将Flask应用封装成Docker服务的实现
Aug 19 Python
python 如何调用 dubbo 接口
Sep 24 Python
python 使用paramiko模块进行封装,远程操作linux主机的示例代码
Dec 03 Python
python 基于selectors库实现文件上传与下载
Dec 31 Python
python 基于opencv去除图片阴影
Jan 26 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扩展函数
2006/10/09 PHP
PHP_MySQL教程-第一天
2007/03/18 PHP
PHP之变量、常量学习笔记
2008/03/27 PHP
PHP 基本语法格式
2009/12/15 PHP
php知道与问问的采集插件代码
2010/10/12 PHP
php实现MD5加密16位(不要默认的32位)
2013/08/12 PHP
PHP实现多文件上传的方法
2015/07/08 PHP
ThinkPHP实现递归无级分类――代码少
2015/07/29 PHP
php递归函数怎么用才有效
2018/02/24 PHP
基于laravel Request的所有方法详解
2019/09/29 PHP
JavaScript与函数式编程解释
2007/04/27 Javascript
js格式化货币数据实现代码
2013/09/04 Javascript
Extjs4中Form的使用之本地hiddenfield
2013/11/26 Javascript
js实现Select下拉框具有输入功能的方法
2015/02/06 Javascript
Bootstrap+jfinal退出系统弹出确认框的实现方法
2016/05/30 Javascript
String字符串截取的四种方式总结
2016/11/28 Javascript
微信小程序手势操作之单触摸点与多触摸点
2017/03/10 Javascript
微信小程序 动态绑定数据及动态事件处理
2017/03/14 Javascript
webpack 模块热替换原理
2018/04/09 Javascript
elementUI多选框反选的实现代码
2019/04/03 Javascript
vue项目中使用fetch的实现方法
2019/04/25 Javascript
[11:33]DAC2018 4.5SOLO赛决赛 MidOne vs Paparazi第二场
2018/04/06 DOTA
详解常用查找数据结构及算法(Python实现)
2016/12/09 Python
使用python中的in ,not in来检查元素是不是在列表中的方法
2018/07/06 Python
python之mock模块基本使用方法详解
2019/06/27 Python
python3中关于excel追加写入格式被覆盖问题(实例代码)
2020/01/10 Python
html5使用Canvas绘图的使用方法
2017/11/21 HTML / CSS
贝尔帐篷精品店:Bell Tent Boutique
2019/06/12 全球购物
Booking.com亚太地区:Booking.com APAC
2020/02/07 全球购物
大唐电信科技股份有限公司java工程师面试经历
2016/12/09 面试题
如何获取某个日期是当月的最后一天
2013/12/05 面试题
《找不到快乐的波斯猫》教学反思
2014/02/24 职场文书
中国好声音华少广告词
2014/03/17 职场文书
教师对学生的寄语
2014/04/03 职场文书
初级职称评定工作总结
2015/08/13 职场文书
html,css,javascript是怎样变成页面的
2023/05/07 HTML / CSS