一般步骤:
1.准备数据集
2.模型选择,设计
3.训练
2.应用-新数据,预测
知道结果的训练--监督学习。
根据训练集,易得为线性模型。
利用w,d评估误差.设:损失函数为
例题代码打了,没保存,不重新打了。’
以下是作业。
出现了两个问题:1.forward函数计算的x里的w,d需不需要重新迭代 2.3d画图中z需要二维
解决:1——不需要,因为w,d在下面这句中已经变成矩阵了。
X, Y = np.meshgrid(w_try, b_try)
2 ——这里的二维指的是数据类型的二维。
#引用库,工具
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
#创建画布,3d空间
fig = plt.figure()
ax1 = plt.axes(projection='3d')
#原始数据
x=[1.0,2.0,3.0]
y=[3.0,5.0,7.0]
#结果
def forward(x):
return x*X+Y
#损失函数
def loss(x,y):
y_pre=forward(x);
return (y_pre-y)*(y_pre-y)
#假设w,b的取值
mse=[]
w_try=np.arange(0.0,4.1,0.1)
b_try=np.arange(-1.0,3.1,0.1)
X, Y = np.meshgrid(w_try, b_try)#返回坐标矩阵
sum=0
for i,j in zip(x,y):
y_pred=forward(i)
loss_val=loss(i,j)
sum+=loss_val
mse.append(sum/3)
#制图
ax1.plot_surface(w_try,b_try,sum/3,cmap='rainbow')
plt.show()
补充知识:
1.
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
NumPy 的全称是“ Numeric Python”,它是 Python 的第三方扩展包,主要用来计算、处理一维或多维数组。
NumPy 提供了多种数据结构,这些数据结构能够非常契合的应用在数组和矩阵的运算上。Matplotlib 是 Python 的绘图库,它经常与 NumPy 一起使用,从而提供一种能够代替 Matlab 的方案。
2.3d画图的命令
fig = plt.figure()
ax1 = plt.axes(projection='3d')
plt.plot()#只有2维
3.numpy.meshgrid()
生成坐标矩阵
使用 meshgrid
方法,你只需要构造一个表示 x
轴上的坐标的向量和一个表示 y
轴上的坐标的向量; 然后作为参数给到 meshgrid()
, 该函数就会返回相应维度的两个矩阵;
例如,你想构造一个 2 行 3 列的矩阵网格点, 那么 x
生成一个 shape(3,)
的向量, y
生成一个 shape(2,)
的向量, 将 x
, y
传入 meshgrid()
, 最后返回的 X , Y 矩阵的 shape(2,3)
3.网格
plt.grid(True) # 显示背景的网格线
plt.grid(False) # 关闭背景的网格线
ax.grid(color=’r’, linestyle=’-‘, linewidth=2) # 设置背景网格线的样式
4.生成矩阵or数组
list = []
for item in data:
list.append(item)
list=np.array(list)
2.np.nditer()迭代器
可以实现多元在不同数组中迭代
6.‘list‘ object has no attribute ‘ndim‘--错误为数据类型不对
7.Expected indentation of 6 spaces ——缩进不对
8.降维函数
np.reshape(A,(a,b))
- A:需要被重新组合的数组
- (a,b): 各个维度的长度。比如要想展开成二维数组,那么(a,b)就是展开成a行b列。
9.可能是版本问题,这个函数用不了。
plot_trisurf