1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
#一次函数
import matplotlib.pyplot as plt #导入库
import numpy as np
def f_shunshi(): #损失函数(没用到)
return np.sum(1.0/2.0*(f_w*Sum_shuju_X+f_b-Sum_shuju_Y)*(f_w*Sum_shuju_X+f_b-Sum_shuju_Y)/10)
def f_daoshu_w(): #关于一次函数w(斜率)的偏导
return np.sum(f_w*(f_w*Sum_shuju_X+f_b-Sum_shuju_Y))/10
def f_daoshu_b(): #关于一次函数b(偏移量)的偏导
return np.sum(f_w*Sum_shuju_X+f_b-Sum_shuju_Y)/10
xuexilv=1e-2 #学习率
f_w=1.0 #函数初始参数
f_b=1.0
print("输入10个数据")
Sum_shuju=np.empty([0,2],dtype=float) #创建一个大数据用来存放x和y)
shuju=np.array([]) #临时参数
for i in range(0, 10): #插入10个数据(可变)
print(f"第 {i + 1}个数据")
x1 = input("输入x:")
x1=float(x1)
shuju=np.append(shuju,x1)
y1 = input("输入y:")
y1=float(y1)
shuju=np.append(shuju,y1)
Sum_shuju=np.append(Sum_shuju,[shuju],axis=0)
shuju = np.array([])
print("数据")
print(Sum_shuju) #验证数据有无插入错误
x=input("是否设置函数初始参数:0/是;1/否(默认w=1,b=1):")
if x==0:
f_w=input("输入w(斜率):")
f_w=float(f_w)
f_b=input("输入b(偏移量)")
f_b=float(f_b)
Sum_shuju_X=Sum_shuju[:,0]
Sum_shuju_Y=Sum_shuju[:,1] #把x与y提取到两个数组
sum_1=input("设置迭代次数:")
sum_1=int(sum_1)
print(f"w的值为:{f_w}")
print(f"b的值为:{f_b}")
f_w_sum=np.array([])
tidu=np.array([])
for i in range(0,sum_1): #开始迭代
f_w2=f_w-xuexilv*f_daoshu_w()
f_b2=f_b-xuexilv*f_daoshu_b()
f_w=f_w2
f_b=f_b2
print(f"w的值为:{f_w}")
print(f"b的值为:{f_b}")
print("********************************************************************")
x_1=range(0,10) #直观的开始验证图形与数据是否拟合
plt.plot(Sum_shuju_X,Sum_shuju_Y,'x',x_1,f_w*x_1+f_w,'b-.')
plt.show() #图来喽!!!!
|