import numpy as np
import matplotlib.pyplot as plt
#載入資料,delimite表示分隔符為逗號
data=np.genfromtxt(
"data.csv"
,delimiter=
",")
x_data=data[:,
0]y_data=data[:,
1]plt.scatter(x_data,y_data)
plt.show(
)#學習率learning rate
lr=0.0001
#截距b=
0#斜率k=0
#最大迭代次數
epochs=
50#最小二乘法
defcompute_error
(b,k,x_data,y_data)
: totalerror=
0for i in
range(0
,len
(x_data)):
totalerror+=
(y_data[i]
-(k*x_data[i]
+b))**2
return totalerror/
float
(len
(x_data))/
2.0def
gradient_descent_runner
(x_data,y_data,b,k,lr,epochs)
:#計算總資料量
m=float
(len
(x_data)
)#迴圈epochs次
for i in
range
(epochs)
: b_grad=
0 k_grad=
0#計算梯度的總和再求平均值
for j in
range(0
,len
(x_data)):
b_grad +=(1
/m)*
(k*x_data[j]
+b-y_data[j]
) k_grad +=(1
/m)*x_data[j]
*(k*x_data[j]
+b-y_data[j]
)#更新b和k
b=b-lr*b_grad
k=k-lr*k_grad
#每迭代5次輸出一次影象
if i%5==
0:print
("epochs:"
,i) plt.plot(x_data,y_data,
'b.'
) plt.plot(x_data,k*x_data+b,
'r')
plt.show(
)return b,k
print
("starting b=,k=,error="
.format
(b,k,compute_error(b,k,x_data,y_data)))
print
("running"
)b,k=gradient_descent_runner(x_data,y_data,b,k,lr,epochs)
print
("after iteration, b=,k=,error="
.format
(epochs,b,k,compute_error(b,k,x_data,y_data)
))
梯度下降法 一元線性回歸
import numpy as np import matplotlib.pyplot as plt 載入資料 data np.genfromtxt data.csv delimiter x data data 0 y data data 1 plt.scatter x data,y data pl...
1 回歸 一元線性回歸 代價函式 梯度下降法
1 回歸是達爾文表弟發現的,就是說人類總體有乙個平均身高。那個高個子生的孩子都個高,矮的孩子生的矮。但是他們的下一代大部分都往平均身高長,也就是說特別高的人,他們的孩子會很高,但是往往比他們自己矮。特別矮的人他們生的孩子會矮一些,但是會比自己的父母高,他們都有這種趨勢。表弟管這個叫做回歸。2 一元線...
機器學習演算法基礎 梯度下降法求一元線性回歸
import numpy as np import matplotlib.pyplot as plt 載入資料 data np.genfromtxt c ml chapter 1 data.csv delimiter x data data 0 y data data 1 plt.scatter x...