借用梯度下降求解以下实际问题
python代码:
import numpy as np
def hy(x1,x2):
return th0+th1*x1+th2*x2
if __name__=='__main__':
th0 = 0
th1 = 0
th2 = 0
delta1,delta2,delta3=1,1,1
x1 = np.array([2.104, 1.600, 2.400, 1.416, 3.000])
x2 = np.array([3, 3, 3, 2, 4])
y = np.array([4.00, 3.30, 3.69, 2.32, 5.40])
alpha = 0.01
for i in range(500):
th0=th0-alpha*(hy(x1[i%5],x2[i%5])-y[i%5])*1
delta1=(hy(x1[i%5],x2[i%5])-y[i%5])
#print(delta1)
th1=th1-alpha*(hy(x1[i%5],x2[i%5])-y[i%5])*x1[i%5]
delta2=(hy(x1[i%5],x2[i%5])-y[i%5])*x1[i%5]
th2=th2-alpha*(hy(x1[i%5],x2[i%5])-y[i%5])*x2[i%5]
delta3=(hy(x1[i%5],x2[i%5])-y[i%5])*x2[i%5]
if (abs(delta1) < 0.01 and abs(delta2) < 0.01 and abs(delta3) < 0.01):
print(th0,th1,th2)
预测结果: