簡單的回歸

2021-10-02 23:04:10 字數 1837 閱讀 9636

import numpy as np

import matplotlib.pyplot as plt

defgenerate_data

(w, b)

: x = np.linspace(0,

100,

10000

) y = w*x+b

return x, y

defloss_calculat

(w, b, x, y)

: loss =

0for i in

range

(len

(x))

: loss +=

(w*x[i]

+b - y[i])**

2return loss/

(float

(len

(x))

)def

gedient_step

(w, b, x, y, lr)

: w_gredient =

0 b_gredient =

0for i in

range

(len

(x))

: w_gredient +=2*

(w*x[i]

+b-y[i])*w

b_gredient +=2*

(w*x[i]

+b-y[i]

) w_gredient /=

len(x)

b_gredient /=

len(x)

w_new = w - w_gredient*lr

b_new = b - b_gredient*lr

return w_new, b_new

defgedient_runner

(x, y ,lr, ite)

: w =

0.001

b =0.001

for i in

range

(ite)

: w, b = gedient_step(w, b, x, y, lr)

if i%9==

0:print

('loss:{}, w:{}, b:{}'

.format

(loss_calculat(w, b, x, y)

, w, b)

)return w, b

defrun()

: x, y = generate_data(10,

20)new_w, new_b = gedient_runner(x, y,

0.002

,1000

)print

('w:{}, b:{}'

.format

(new_w, new_b)

) plt.scatter(x,y)

plt.plot(x, new_w*x+new_b,

'r')

plt.show(

)if __name__==

"__main__"

: run(

)

learning rate對擬合的影響很大,當選擇lr=0.005時梯度**,當lr=0.001時loss對b的梯度太小導致b還未到期望值就更新不動了,當lr=0.002時效果較好w=9.728193529481953, b=20.582857302302166![這時w:9.97039874310612, b:21.24976619172883

簡單的回歸分析

最近在看慕課上北大開的資料結構和演算法python版,老師講的深入淺出,我會不斷輸出課上的心得體會,與大家共同討論,共同進步。回歸分析是一種用於資料分類的回歸模型。這個模型非常簡單,事實上,它是乙個線性分類器。無論如何,當你想要去探索你的資料的時候,這是乙個很好的出發點。很容易程式設計,完全可以速成...

簡單線性回歸

真實值 y theta x varepsilon 值 hat theta x varepsilon 為誤差 項,服從 均值為0 方差為 為誤差項,服從均值為0,方差為 為誤差項,服 從均值為 0,方差 為 sigma 的高斯分布。已知若干樣本,可以得到若干 varepsilon 值,根 據極大似 然...

轉 簡單多項回歸

例子 銷售額x與流通費率y xx c 1.5,2.8,4.5,7.5,10.5,13.5,15.1,16.5,19.5,22.5,24.5,26.5 yy c 7.0,5.5,4.6,3.6,2.9,2.7,2.5,2.4,2.2,2.1,1.9,1.8 tt data.frame xx,yy na...