MSE = 1/m * ∑i=1m(yi−y^i)2
a = [1., 2., 3., 4., 5., 6., 7., 8., 9.] b = [3., 5., 7., 9., 11., 13., 15., 17., 19.] points = [[a[i],b[i]] for i in range(len(a))]lr= 0.001 eps = 0.0001 m = len(points) last_error = float('inf') k = b = grad_k = grad_b = error = 0.0 for step in range(100000):error = 0.0 # 重新初始化误差为0for i in range(m):x,y = points[i]predict_y = x*k + bgrad_k = (predict_y - y) * x # 计算k的梯度grad_b = predict_y - y # 计算b的梯度 grad_k/=mgrad_b/=mk-=grad_k*lrb-=grad_b*lrerror += (predict_y - y) ** 2 # 累积误差if abs(last_error - error) < eps:breaklast_error = errorprint('{0} * x + {1}'.format(k, b))
def liner_fitting(data_x,data_y):size = len(data_x);i=0sum_xy=0sum_y=0sum_x=0sum_sqare_x=0average_x=0;average_y=0;while i<size:sum_xy+=data_x[i]*data_y[i];sum_y+=data_y[i]sum_x+=data_x[i]sum_sqare_x+=data_x[i]*data_x[i]i+=1average_x=sum_x/sizeaverage_y=sum_y/sizereturn_k=(size*sum_xy-sum_x*sum_y)/(size*sum_sqare_x-sum_x*sum_x)return_b=average_y-average_x*return_kreturn [return_k,return_b]