之前推导了一元线性回归和多元线性回归,今天就用python来实现一下一元线性回归

先看下之前推导的结果

  , 

第一种是用循环迭代的计算方法。这里的x,y是numpy中的array类型

  1. def sum(x):
  2. sum1 = 0
  3. for i in x:
  4. sum1 += i
  5. return sum1
  6. def sub(x,y):
  7. ret = []
  8. for i in range(len(x)):
  9. ret.append(x[i] - y)
  10. return np.array(ret)
  11. def mean(num):
  12. sum = 0
  13. for i in num:
  14. sum += i
  15. return sum / len(num)
  16. def multiply(x,y):
  17. ret = []
  18. for i in range(len(x)):
  19. ret.append(x[i]*y[i])
  20. return np.array(ret)
  21. def square(x):
  22. ret = []
  23. for i in range(len(x)):
  24. ret.append (x[i] * x[i])
  25. return np.array(ret)
  26. def linearRegression(x,y):
  27. length = len(x)
  28. t1 = time()
  29. x_mean1 = mean(x)
  30. a = sum(multiply(y,sub(x,x_mean1))) / (sum(square(x)) - sum(x) ** 2 / length)
  31. sum1 = 0
  32. for i in range(length):
  33. sum1 += (y[i] - a * x[i])
  34. b = sum1 / length
  1. 第二种人是用vectorization的方法
  1. def linearRegression_(x,y):
  2. length = len(x)
  3. x_mean = x.mean()
  4. a = (y * (x - x_mean)).sum() / ((x ** 2).sum() - x.sum() ** 2 / length)
  5. b = (y - a * x).sum() / length
  1.   

为了比较二者的性能,这里我们随机生成10000条数据,分别统计两种方法运行的时间

  1. x=np.random.randint(0,100,10000)
  2. y=np.random.randint(0,100,10000)
  3.  
  4. t1 = time()
  5. linearRegression(x,y)
  6. t2 = time()
  7. print(t2 - t1)
  8.  
  9. t1 = time()
  10. linearRegression_(x,y)
  11. t2 = time()

得到二者的结果

  1. 0.1349632740020752
  2. 0.0009996891021728516

上面的是循环计算所需的时间,下面的是vectorization所需得时间。很明显vectorization要优于循环计算

  1.  

  

python实现简单线性回归的更多相关文章

  1. day-12 python实现简单线性回归和多元线性回归算法

    1.问题引入  在统计学中,线性回归是利用称为线性回归方程的最小二乘函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析.这种函数是一个或多个称为回归系数的模型参数的线性组合.一个带有一个自变 ...

  2. Python回归分析五部曲(一)—简单线性回归

    回归最初是遗传学中的一个名词,是由英国生物学家兼统计学家高尔顿首先提出来的,他在研究人类身高的时候发现:高个子回归人类的平均身高,而矮个子则从另一方向回归人类的平均身高: 回归分析整体逻辑 回归分析( ...

  3. 简单线性回归(梯度下降法) python实现

    grad_desc .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { bord ...

  4. 简单线性回归(最小二乘法)python实现

      简单线性回归(最小二乘法)¶   0.引入依赖¶ In [7]: import numpy as np import matplotlib.pyplot as plt   1.导入数据¶ In [ ...

  5. python实现多变量线性回归(Linear Regression with Multiple Variables)

    本文介绍如何使用python实现多变量线性回归,文章参考NG的视频和黄海广博士的笔记 现在对房价模型增加更多的特征,例如房间数楼层等,构成一个含有多个变量的模型,模型中的特征为( x1,x2,..., ...

  6. 机器学习(2):简单线性回归 | 一元回归 | 损失计算 | MSE

    前文再续书接上一回,机器学习的主要目的,是根据特征进行预测.预测到的信息,叫标签. 从特征映射出标签的诸多算法中,有一个简单的算法,叫简单线性回归.本文介绍简单线性回归的概念. (1)什么是简单线性回 ...

  7. 机器学习——Day 2 简单线性回归

    写在开头 由于某些原因开始了机器学习,为了更好的理解和深入的思考(记录)所以开始写博客. 学习教程来源于github的Avik-Jain的100-Days-Of-MLCode 英文版:https:// ...

  8. 教你用Python实现简单监督学习算法

    教你用Python实现简单监督学习算法 监督学习作为运用最广泛的机器学习方法,一直以来都是从数据挖掘信息的重要手段.即便是在无监督学习兴起的近日,监督学习也依旧是入门机器学习的钥匙. 这篇监督学习教程 ...

  9. Python爬虫简单实现CSDN博客文章标题列表

    Python爬虫简单实现CSDN博客文章标题列表 操作步骤: 分析接口,怎么获取数据? 模拟接口,尝试提取数据 封装接口函数,实现函数调用. 1.分析接口 打开Chrome浏览器,开启开发者工具(F1 ...

随机推荐

  1. POJ3977 Subset

    嘟嘟嘟 这个数据范围显然是折半搜索. 把序列分成两半,枚举前一半的子集,存下来.然后再枚举后一半的子集,二分查找. 细节: 1.最优解可能只在一半的子集里,所以枚举的时候也要更新答案. 2.对于当前结 ...

  2. python自动化之djangoform表单验证

    djangoforms表单验证 创建个类,继承于 forms.form obj = FM(request.post) obj.is_valid() 如果验证没有问题会返回true,否则会返回false ...

  3. 拼多多java后台笔试题目总结(20180830)

    1.回合攻击问题 package com.hone.pdd; import java.util.Scanner; /** * 题目:模拟一个游戏场景,两种伤害,一种正常伤害,一种是先蓄力(也算一个回合 ...

  4. Carthage 的使用

    第一步,当然是安装 Carthage,网上找吧 第二步,找到你要用的那个仓库,eg:https://github.com/jiutianhuanpei/SHBPlayer 第三步,cd 到工程根目录下 ...

  5. P2049 魔术棋子

    题目描述 在一个M*N的魔术棋盘中,每个格子中均有一个整数,当棋子走进这个格子中,则此棋子上的数会被乘以此格子中的数.一个棋子从左上角走到右下角,只能向右或向下行动,请问此棋子走到右下角后,模(mod ...

  6. [图解tensorflow源码] Graph 图模块 (UML视图)

  7. linux文件系统初始化过程(2)---挂载rootfs文件系统

    一.目的 本文主要讲述linux3.10文件系统初始化过程的第一阶段:挂载rootfs文件系统. rootfs是基于内存的文件系统,所有操作都在内存中完成:也没有实际的存储设备,所以不需要设备驱动程序 ...

  8. sublime 一些常用功能和快捷键

    Ctrl+D 选词 (反复按快捷键,即可继续向下同时选中下一个相同的文本进行同时编辑)Ctrl+G 跳转到相应的行Ctrl+J 合并行(已选择需要合并的多行时)Ctrl+L 选择整行(按住-继续选择下 ...

  9. 关于安装时无法重启rabbitmq服务

    如图重启时找不到rabbitmq, 解决办法: rabbitmqctl stop :停止rabbitmq  rabbitmq-server restart : 重启rabbitmq 这两步就可以完成重 ...

  10. Redis之Redis安装(Mac OS版本)

    各版本下载地址:http://download.redis.io/releases,本教程使用版本为redis-5.0.4. ##进入应用安装目录 cd /usr/local ##下载安装包 wget ...