测量预测值Ŷ
与某些真实值匹配程度。MSE 通常用作回归问题的损失函数。
由单个样本训练损失来推导出整个训练集的MSE
M S E = 1 n ∑ i = 1 n ( Y i − Y ^ i ) 2 \mathrm{MSE}=\frac{1}{n} \sum_{i=1}^{n}\left(Y_{i}-\hat{Y}_{i}\right)^{2} MSE=n1i=1∑n(Yi−Y^i)2
下面来看MSE的python实现
定义输入输出
定义模型,这里就使用线性模型
定义损失函数
权重矩阵和对应的MSE损失值
生成0.0-4.0的序列
计算训练集中的每一个样本的损失函数
保存w和mse
画图
下面是部分结果
w= 0.0
1.0 2.0 0.0 4.0
2.0 4.0 0.0 16.0
3.0 6.0 0.0 36.0
MSE= 18.666666666666668
w= 0.1
1.0 2.0 0.1 3.61
2.0 4.0 0.2 14.44
3.0 6.0 0.30000000000000004 32.49
MSE= 16.846666666666668
w= 0.2
1.0 2.0 0.2 3.24
2.0 4.0 0.4 12.96
3.0 6.0 0.6000000000000001 29.160000000000004
MSE= 15.120000000000003
w= 0.30000000000000004
1.0 2.0 0.30000000000000004 2.8899999999999997
2.0 4.0 0.6000000000000001 11.559999999999999
3.0 6.0 0.9000000000000001 26.009999999999998
MSE= 13.486666666666665
w= 0.4
1.0 2.0 0.4 2.5600000000000005
2.0 4.0 0.8 10.240000000000002
3.0 6.0 1.2000000000000002 23.04
MSE= 11.946666666666667
w= 0.5
1.0 2.0 0.5 2.25
2.0 4.0 1.0 9.0
3.0 6.0 1.5 20.25
MSE= 10.5
下面是具体代码
import numpy as np
import matplotlib.pyplot as plt
x_data = [1.0, 2.0, 3.0] # 输入x
y_data = [2.0, 4.0, 6.0] # 输出y
# 定义模型
def forward(x):
return x * w
# 定义损失函数
def loss(x, y):
y_pred = forward(x)
return (y_pred - y) * (y_pred - y)
w_list = [] # 权重矩阵
mse_list = [] # 对应的MSE损失值
for w in np.arange(0.0, 4.1, 0.1): # 生成0.0-4.0的序列
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()