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 相关文章推荐
Django Admin实现上传图片校验功能
Mar 06 Python
web.py 十分钟创建简易博客实现代码
Apr 22 Python
Python中常用信号signal类型实例
Jan 25 Python
Flask框架各种常见装饰器示例
Jul 17 Python
python3.6下Numpy库下载与安装图文教程
Apr 02 Python
python装饰器的特性原理详解
Dec 25 Python
python统计字符的个数代码实例
Feb 07 Python
Tensorflow中的dropout的使用方法
Mar 13 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
May 25 Python
解决python运行启动报错问题
Jun 01 Python
详细分析Python可变对象和不可变对象
Jul 09 Python
如何用Python搭建gRPC服务
Jun 30 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 引用文件技巧
2010/03/02 PHP
phpQuery让php处理html代码像jQuery一样方便
2015/01/06 PHP
php简单处理XML数据的方法示例
2017/05/19 PHP
PHP基于curl模拟post提交json数据示例
2018/06/22 PHP
PHP如何通过date() 函数格式化显示时间
2020/11/13 PHP
baidu博客的编辑友情链接的新的层窗口!经典~支持【FF】
2007/02/09 Javascript
html5的自定义data-*属性和jquery的data()方法的使用示例
2013/08/21 Javascript
JS 屏蔽键盘不可用与鼠标右键不可用的方法
2013/11/18 Javascript
js实现ArrayList功能附实例代码
2014/10/29 Javascript
jQuery实现选项联动轮播效果【附实例】
2016/04/19 Javascript
微信小程序 WebSocket详解及应用
2017/01/21 Javascript
async/await与promise(nodejs中的异步操作问题)
2017/03/03 NodeJs
vuejs实现标签选项卡动态更改css样式的方法
2018/05/31 Javascript
Vue.use源码学习小结
2018/06/20 Javascript
使用VUE+iView+.Net Core上传图片的方法示例
2019/01/04 Javascript
基于Vue2-Calendar改进的日历组件(含中文使用说明)
2019/04/14 Javascript
JavaScript动态添加数据到表单并提交的几种方式
2019/06/26 Javascript
vue仿ios列表左划删除
2019/09/26 Javascript
浅谈vue 多个变量同时赋相同值互相影响
2020/08/05 Javascript
vue下拉刷新组件的开发及slot的使用详解
2020/12/23 Vue.js
使用python实现扫描端口示例
2014/03/29 Python
Python KMeans聚类问题分析
2018/02/23 Python
Python3.6连接Oracle数据库的方法详解
2018/05/18 Python
python requests 测试代理ip是否生效
2018/07/25 Python
使用python判断jpeg图片的完整性实例
2019/06/10 Python
使用python实现微信小程序自动签到功能
2020/04/27 Python
jupyter 添加不同内核的操作
2021/02/06 Python
世界上最全面的汽车零部件和配件集合:JC Whitney
2016/09/04 全球购物
Vans澳大利亚官网:购买鞋子、服装及配件
2019/09/05 全球购物
Java多态性的定义以及类型
2014/09/16 面试题
银行优秀员工事迹
2014/02/06 职场文书
教师专业自荐书范文
2014/02/10 职场文书
大学生就业自荐书
2014/06/16 职场文书
纪检干部对照检查材料
2014/08/22 职场文书
2014工程部年度工作总结
2014/12/17 职场文书
php修改word的实例方法
2021/11/17 PHP