代码:
# Author:Wyy
# -*- coding = utf-8 -*-
# @Time :2022/9/19
# @Author:WYY
# @Site :
# @File :梯度下降算法.py
# @Software: PyCharm
# 导包
import matplotlib.pyplot as plt
import sys
import numpy as np
# 输入、定义初始值和变量
x1 = np.array([2104, 1600, 2400, 1416, 3000])
x2 = np.array([3, 3, 3, 2, 4])
y = np.array([400, 330, 369, 232, 540])
a0 = 0.01
w0 = 1
w1 = 1
w2 = 1
j = 0
alp = 0.01
# 定义数组
xx = []
yy = []
zz = []
def hy(xx1, xx2):
return w0 + w1 * xx1 + w2 * xx2
# 迭代10000000次,输入公式计算w0、1、2
while (j < 10000000):
w0 = w0 - (hy(x1[j % 4], x2[j % 4]) - y[j % 4]) * alp * 1e-2
w1 = w1 - (hy(x1[j % 4], x2[j % 4]) - y[j % 4]) * x1[j % 4] * alp * 1e-5
w2 = w2 - (hy(x1[j % 4], x2[j % 4]) - y[j % 4]) * x2[j % 4] * alp * 1e-2
# 将w0、1、2分别传入数组
xx.append(w0)
yy.append(w1)
zz.append(w2)
if (abs(hy(x1[j % 4], x2[j % 4]) - y[j % 4]) < a0 and abs(
(hy(x1[j % 4], x2[j % 4]) - y[j % 4]) * x1[j % 4]) < a0 and abs(
(hy(x1[j % 4], x2[j % 4]) - y[j % 4]) * x2[j % 4]) < a0):
print("true")
print(hy(x1[j % 4], x2[j % 4]) - y[j % 4])
print(abs((hy(x1[j % 4], x2[j % 4]) - y[j % 4]) * x1[j % 4]))
print(abs((hy(x1[j % 4], x2[j % 4]) - y[j % 4]) * x2[j % 4]))
print(w0, w1, w2)
j = j + 1
# 输出结果
print("a")
plt.plot(xx,yy,zz,"*")
print((hy(x1[0], x2[0]) - y[0]))
print(w0, w1, w2)
plt.show()
输出结果: