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修改Excel数据的实例代码
Nov 01 Python
Python标准库之循环器(itertools)介绍
Nov 25 Python
在Python中使用itertools模块中的组合函数的教程
Apr 13 Python
python简单文本处理的方法
Jul 10 Python
Python字符串格式化的方法(两种)
Sep 19 Python
简单实现python数独游戏
Mar 30 Python
对python中词典的values值的修改或新增KEY详解
Jan 20 Python
mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法
Mar 19 Python
python 给图像添加透明度(alpha通道)
Apr 09 Python
在django中实现choices字段获取对应字段值
Jul 12 Python
Python 如何操作 SQLite 数据库
Aug 17 Python
python3 实现mysql数据库连接池的示例代码
Apr 17 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.MVC的模板标签系统(五)
2006/09/05 PHP
php从给定url获取文件扩展名的方法
2015/03/14 PHP
Zend Framework教程之Application和Bootstrap用法详解
2016/03/10 PHP
JavaScript获取GridView中用户点击控件的行号,列号
2009/04/14 Javascript
获取焦点时,利用js定时器设定时间执行动作
2010/04/02 Javascript
jQuery中:focus选择器用法实例
2014/12/30 Javascript
AngularJS Module方法详解
2015/12/08 Javascript
JavaScript动态创建div等元素实例讲解
2016/01/06 Javascript
使用jQuery处理AJAX请求的基础学习教程
2016/05/10 Javascript
Ztree新增角色和编辑角色回显问题的解决
2016/10/25 Javascript
js实现数组和对象的深浅拷贝
2017/09/30 Javascript
解决Vue使用mint-ui loadmore实现上拉加载与下拉刷新出现一个页面使用多个上拉加载后冲突问题
2017/11/07 Javascript
ReactNative中使用Redux架构总结
2017/12/15 Javascript
基于casperjs和resemble.js实现一个像素对比服务详解
2018/01/10 Javascript
微信小程序下拉加载和上拉刷新两种实现方法详解
2019/09/05 Javascript
vue使用swiper.js重叠轮播组建样式
2019/11/14 Javascript
微信小程序批量上传图片到七牛(推荐)
2019/12/19 Javascript
vue 检测用户上传图片宽高的方法
2020/02/06 Javascript
Python中的startswith和endswith函数使用实例
2014/08/25 Python
使用python实现knn算法
2017/12/20 Python
python在每个字符后添加空格的实例
2018/05/07 Python
python3实现名片管理系统
2020/11/29 Python
Python 实现中值滤波、均值滤波的方法
2019/01/09 Python
python自定义函数实现最大值的输出方法
2019/07/09 Python
python设置环境变量的作用整理
2020/02/17 Python
python:HDF和CSV存储优劣对比分析
2020/06/08 Python
Python实现数字的格式化输出
2020/08/01 Python
英国排名第一的LED灯泡网站:LED Bulbs
2019/09/03 全球购物
美容师的职业规划书
2013/12/27 职场文书
公立医院改革实施方案
2014/03/14 职场文书
机关保密承诺书
2014/06/03 职场文书
车辆工程专业求职信
2014/06/14 职场文书
个人贷款收入证明
2014/10/26 职场文书
刘胡兰观后感
2015/06/16 职场文书
2019毕业论文致谢词
2019/06/24 职场文书
SpringBoot使用ip2region获取地理位置信息的方法
2022/06/21 Java/Android