拿python写了个用最速下降法做线性拟合的,还是从最简单的开始(固定x, y,因变量就一个)
#最速下降法做线性拟合,因变量只有一个
def gradient_decent(x,y):
a = [0, 0] #定义初始系数值
J = 0 #查看误差,目标,使J最小
Jtemp = 0
for xtemp, ytemp in zip(x, y): #求开始时J值
Jtemp += (a[0]+a[1]*xtemp-ytemp)**2
Jtemp /= 2
while abs(J-Jtemp)>0.001:(精度为0.001)
J = Jtemp
for xtemp, ytemp in zip(x, y):
atemp = a[0]-0.01*(a[0]+a[1]*xtemp-ytemp)
a[1] -= 0.01*(a[0]+a[1]*xtemp-ytemp)*xtemp
a[0] = atemp
for xtemp, ytemp in zip(x, y):
Jtemp += (a[0]+a[1]*xtemp-ytemp)**2
Jtemp /= 2
print("线性拟合结果为a0=%f, a1=%f"%(a[0], a[1]))
x = [1, 2, 3, 4, 5]
y = [0.5, 1, 1, 1.5, 2]
gradient_decent(x,y)