import numpy as np w0, w1, w2, a = 0, 0, 1, 0.01 x1 = np.array([2.104, 1.600, 2.400, 1.416, 3.000]) x2 = np.array([3, 3, 3, 2, 5]) y = np.array([4.00, 3.30, 3.69, 2.32, 5.40]) w = 0 def update(w0, w1, w2, a, x1, x2, y): loss, dl0, dl1, dl2= 0, 0, 0, 0 i=0 while i < 5: loss += 1 / 2 * (w0 + w1 * x1[i] + w2 * x2[i] - y[i]) ** 2 dl0 += w0 + w1 * x1[i] + w2 * x2[i] - y[i] dl1 += (w0 + w1 * x1[i] + w2 * x2[i] - y[i]) * x1[i] dl2 += (w0 + w1 * x1[i] + w2 * x2[i] - y[i]) * x2[i] i += 1 loss = loss / 5 dl0 = dl0 / 5 dl1 = dl1 / 5 dl2 = dl2 / 5 w0 = w0 - a * dl0 w1 = w1 - a * dl1 w2 = w2 - a * dl2 return loss, w0, w1, w2 while w<2000: w+=1 j, w0, w1, w2 = update(w0, w1, w2, a, x1, x2, y) print(j, w0, w1, w2)