import numpy as np
x1 = np.array([2.104, 1.600, 2.400, 1.416, 3.000])
x2 = np.array([3, 3, 3, 2, 4])
y1 = np.array([4.00, 3.30, 3.69, 2.32, 5.40]) #数据存到矩阵
w0 = 0
w1 = 0
w2 = 0
alpha = 0.01 #赋值
def fx(x1, x2):
return w0 + w1 * x1 + w2 * x2 # 求和
for i in range(1000): # 迭代1000次 # 下为梯度下降公式
w0 = w0 - alpha * (fx(x1[i % 5], x2[i % 5]) - y1[i % 5])
w1 = w1 - alpha * (fx(x1[i % 5], x2[i % 5]) - y1[i % 5]) * x1[i % 5]
w2 = w2 - alpha * (fx(x1[i % 5], x2[i % 5]) - y1[i % 5]) * x2[i % 5]
gred0 = (fx(x1[i % 5], x2[i % 5]) - y1[i % 5]) # 求梯度
gred1 = (fx(x1[i % 5], x2[i % 5]) - y1[i % 5]) * x1[i % 5]
gred2 = (fx(x1[i % 5], x2[i % 5]) - y1[i % 5]) * x2[i % 5]
#判断偏导趋近于0
if (abs(gred0) < 0.01 and abs(gred1) < 0.01 and abs(gred2) < 0.01):
print(w0, w1, w2)
print(gred0, gred1, gred2)
break