1. 程式人生 > >python實現簡單線性回歸

python實現簡單線性回歸

tip 統計 app 叠代 隨機生成 cto dom 兩種 gif

之前推導了一元線性回歸和多元線性回歸,今天就用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實現簡單線性回歸