线性模型课后作业
模型 y=wx+b(y=2x+4)
数据集:
x | y |
---|---|
1.0 | 6.0 |
2.0 | 8.0 |
3.0 | 10.0 |
4.0 | ? |
实现代码部分
# Author:gt
# CreatTime:2021/10/29
# FileName:homework1.py
#线性模型y=w*x+b
import numpy as np
import matplotlib.pyplot as plt
#用python画二元函数的3D图像
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import pyplot as plt
#准备数据集
x_train=[1.0,2.0,3.0]
y_train=[6.0,8.0,10.0]
#模型
def forward(x):#一次接收一个数值
return w*x+b
#定义损失函数(是单个样本的)
#每一次前向传播后才能得到预测值
def loss(x,y):
y_pre=forward(x)
return (y_pre-y)**2
#保存每次的损失值mse
mse_list=[]
#手动给出w,b的值
w_list=np.arange(-5.0,5.0,0.1)
b_list=np.arange(-5.0,5.0,0.1)
#创建w和b的网格
w,b=np.meshgrid(w_list,b_list)
l_sum=0
#这里相当于用一个循环来表达整个MSE表达式,l_sum=[(wx1+b-y1)**2+(wx2+b-y2)**2+(wx3+b-y3)**2] MSE=1/m((wx1+b-y1)**2+(wx2+b-y2)**2+(wx3+b-y3)**2)
for x_val,y_val in zip(x_train,y_train):#计算所有样本在同一个w取值下的损失
y_pre=forward(x_val)
loss_val=loss(x_val,y_val)
l_sum+=loss_val#损失值进行累加
#绘制l_sum/3与w和b之间的函数关系图
fig=plt.figure()
ax=Axes3D(fig)
ax.plot_surface(w,b,l_sum/3)
ax.set_xlabel("w’s value")
ax.set_ylabel("b's value")
ax.set_zlabel("MSE‘ value")
plt.show()
运行结果:
不太完美的地方,图片不能鼠标拖曳旋转,不好观察MSE=0时,w和b的取值
绘制3d图像这块参考了这篇文章,关于python绘制二元函数的图像:
https://blog.csdn.net/your_answer/article/details/79135076
完结,撒花