import numpy as np
def f_function(x):
data=0.5*x+1.8+np.random.uniform(0.01,0.02,(1,1))
return data
def use_function():
x=np.mat(np.linspace(0,100,num=1000))
y=np.mat(f_function(x))
return x,y
def mse_function(w_current1,b_current1,x,y):
x=np.mat(x)
y=np.mat(y)
loss_f=np.mat(np.zeros((1,1000)))
for i in range(1000):
x_s=x[0,i]
real=y[0,i]
cla=w_current1*x_s+b_current1
loss_f[0,i]=(real-cla)*(real-cla)
loss_real=np.sum(np.array(loss_f))*0.001
return loss_real,w_current1,b_current1
def xiajiang_fun(x_old,y_old,w,b,learnrate1,learnrate2):
x_old=np.mat(x_old)
y_old=np.mat(y_old)
new_w=0
new_b=0
for i in range(1000):
x=x_old[0,i]
y=y_old[0,i]
new_w += -2*x*(y-(w*x+b))*0.001
new_b += -2*(y-(w*x+b)) *0.001
w_new= (w-learnrate1*new_w)
b_new= 3.6*(w-learnrate2*new_b)
return w_new,b_new
x,y=use_function()
w=13
b=14
iteration=100
for i in range(iteration):
loss_function_reault,w_old,b_old = mse_function(w,b,x,y)
if loss_function_reault <0.01:
print('ok',i ,'break')
break
else:
w_new1,b_new1=xiajiang_fun(x,y,w_old,b_old,0.0001,0.0001)
w=w_new1
b=b_new1
print(w,b)