首先我们需要采样自真实模型的多组数据,对于已知真实模型的玩具样例,我们直接从指定的1.477,b=0.089的真实模型中直接采样:
y=1.477*x+0.089
1.采样数据
为了能够很好地模拟真实样本的观测误差,我们给模型添加误差自变量c,他采样自均值为0,方差为0.01的高斯分布: y=1.477x+0.089+c,c~N(0,0.01)
通过随机采样n=1000次,我们将获得n个样本的训练数据集:
data=[]#保存样本集的列表
for i in range(100):#循环采样100个点
x=np.random.uniform(-10.,10.)#随机采样输入x
#采样高斯噪声
eps=np.random.normal(0.,0.1)
#得到模型的输出
y=1.477*x+0.089+eps
data.append([x,y])#保存样本点
data=np.array(data)#转换为2Dnumpy数组
循环进行100次采样,每次从区间[-10,10]的均匀分布U(0,1)中随机采样一个数据x,同时从均值为0,方差为0.01的高斯分布N(0,0.01)中随机采样噪声c,根据真实模型生成y的数据,并保存为Numpy数组。
2.计算误差
循环计算在每个点(x,y)处的预测值与真实值之间的差集平方并累加,从而获得训练集上的均方差损失值。
def mse(b,w,points):
#根据当前的w,b参数计算均方差损失
totalError=0
for i in range(0,len(points)):#循环迭代所有点
x=points[i,0]#获得i号点的输入x
y=points[i,1]#获得i号点的输出y
#计算差的平方,并累加
totalError+=(y-(w*x+b))**2