1、数据集和测试集
数据集拿到后一般划分为两部分,训练集和测试集,然后使用训练集的数据来训练模型,用测试集上的误差作为最终模型在应对现实场景中的泛化误差。
一般来说,测试集在训练的时候是不能偷看的。
我们可以使用训练集的数据来训练模型,然后用测试集上的误差作为最终模型在应对现实场景中的泛化误差。有了测试集,我们想要验证模型的最终效果,只需将训练好的模型在测试集上计算误差,即可认为此误差即为泛化误差的近似,我们只需让我们训练好的模型在测试集上的误差最小即可。
2、过拟合
过拟合: 在训练集上匹配度很好,但是太过了,把噪声什么的也学进来了。测试集效果不行。
泛化能力: 对于没见过的图像也能进行识别,这是我们所需要的。
3、有监督学习无监督学习
有监督学习方法必须要有训练集与测试样本。在训练集中找规律,而对测试样本使用这种规律。而非监督学习没有训练集,只有一组数据,在该组数据集内寻找规律。
有监督学习的方法就是识别事物,识别的结果表现在给待识别数据加上了标签。因此训练样本集必须由带标签的样本组成。而非监督学习方法只有要分析的数据集的本身,预先没有什么标签。如果发现数据集呈现某种聚集性,则可按自然的聚集性分类,但不予以某种预先分类标签对上号为目的。
4、线性模型
y=wx+b
训练的结果就是k和b的值,w权重参数,x输入信息,b偏置参数。
5、训练误差
loss=(ytrain-y)的平方 --------平均平方误差
损失函数MSE的值越小,代表拟合的效果越好
6、线性模型实现练习代码
import numpy as np import matplotlib.pyplot as plt; x_data = [1.0, 2.0, 3.0] y_data = [2.0, 4.0, 6.0] #线性模型 def forward(x): return x * w #损失函数 def loss(x, y): y_pred = forward(x) return (y_pred - y) * (y_pred - y) #迭代取值,计算每个w取值下的x,y,y_pred,loss_val w_list = [] mse_list = [] for w in np.arange(0.0, 4.1, 0.1): print('w=', w) l_sum = 0 for x_val, y_val in zip(x_data, y_data): y_pred_val = forward(x_val) loss_val = loss(x_val, y_val) l_sum += loss_val print('\t', x_val, y_val, y_pred_val, loss_val) print('MSE=', l_sum / 3) w_list.append(w) mse_list.append(l_sum / 3) ##画图 plt.plot(w_list, mse_list) plt.ylabel('Loss') plt.xlabel('w') plt.show()
输出图片
7、课后练习
代码
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
#这里设函数为y=3x+2
x_data = [1.0,2.0,3.0]
y_data = [5.0,8.0,11.0]
def forward(x):
return x * w + b
def loss(x,y):
y_pred = forward(x)
return (y_pred-y)*(y_pred-y)
mse_list = []
W=np.arange(0.0,4.1,0.1)
B=np.arange(0.0,4.1,0.1)
[w,b]=np.meshgrid(W,B)
l_sum = 0
for x_val, y_val in zip(x_data, y_data):
y_pred_val = forward(x_val)
print(y_pred_val)
loss_val = loss(x_val, y_val)
l_sum += loss_val
fig = plt.figure()
ax = Axes3D(fig)
ax.plot_surface(w, b, l_sum/3)
plt.show()