ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python实现简单线性回归

2019-03-02 20:02:13  阅读:234  来源: 互联网

标签:python 回归 ret len length sum1 线性 sum def


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

先看下之前推导的结果

  , 

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

def sum(x):
    sum1 = 0
    for i in x:
        sum1 += i
    return sum1 
def sub(x,y):
    ret = []
    for i in range(len(x)):
        ret.append(x[i] - y)
    return np.array(ret)
def mean(num):
    sum = 0
    for i in num:
        sum += i
    return sum / len(num)
def multiply(x,y):
    ret = []
    for i in range(len(x)):
        ret.append(x[i]*y[i])
    return np.array(ret)
def square(x):
    ret = []
    for i in range(len(x)):
        ret.append (x[i] * x[i])
    return np.array(ret)def linearRegression(x,y):
    length = len(x)
    t1 = time()
    x_mean1 = mean(x)
    a = sum(multiply(y,sub(x,x_mean1))) / (sum(square(x)) - sum(x) ** 2 / length)
    sum1 = 0
    for i in range(length):
        sum1 += (y[i] - a * x[i])
    b = sum1 / length

 

第二种人是用vectorization的方法
def linearRegression_(x,y):
    length = len(x)
    x_mean = x.mean()
    a = (y * (x - x_mean)).sum() / ((x ** 2).sum() - x.sum() ** 2 / length)
    b = (y - a * x).sum() / length
  

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

x=np.random.randint(0,100,10000)
y=np.random.randint(0,100,10000)

t1 = time() 
linearRegression(x,y)
t2 = time()
print(t2 - t1)

t1 = time()
linearRegression_(x,y)
t2 = time()

 

得到二者的结果

0.1349632740020752
0.0009996891021728516

 

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

 

  

 

标签:python,回归,ret,len,length,sum1,线性,sum,def
来源: https://www.cnblogs.com/mambakb/p/10462439.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有