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...