如何计算平均损失值

如何计算平均损失值

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

例给出一组训练集的数据如下:

x_list = [1.0, 2.0, 3.0]
y_list = [2.0, 4.0, 6.0]

问:如果x取4的时候,y的值为多少?

很明显,x和y之间存在着种线性关系 即y=w*x+b

如果确定了w和b的值 那么问题就好解决了

解决思路

1.模型简化 去掉b,直接令y=w*x

2.确定w的值

‘’’
利用穷举法来确定w的值
a.首先大致估计w的取值范围,然后在这个范围内,去每一个w的值,算出对应的损失(loss)
b.计算每一个样本的损失的方法(样本损失):
公式: loss=(Y-y)**2 其中:Y:为计算值 y:为实际值
例:当w=1 x=1时 计算得出的Y值为:1 真实的y值为:2
那么损失loss=(1-2)**2=1 此损失称为样本损失
c.计算平均损失(平均损失mse(mean square error)):
公式:mean=avg(loss1+loss2+…) 即取所有样本损失的平均值
d.将平均损失mean的值来作为w的权重,mean值越小,说明损失越小,估计值也就越接近真实值,w的权重也就越高
e.权重最高的w即为我们要确定的w
‘’’

以此例 绘制不同w值其对应的平均损失(mse)

w_list = [] # 存放穷举的w值的列表
mse_list = [] # 存放w对应mse的列表

定义计算样本损失的方法

def loss(y, y_pred):
return (y - y_pred) ** 2

定义计算求预测值的方法

def forward(w, x):
return w * x

假设w的大致取值范围为[0,4]

for w in np.arange(0.0, 4.1, 0.1):
w_list.append(w)

sum_mse = 0  # 用于记录w取不同值时下的mse的总和 总损失
for x, y in zip(x_list, y_list):
    y_pred = forward(w, x)
    loss_ = loss(y, y_pred)
    sum_mse += loss_

mse = sum_mse / len(x_list)  # 平均损失=总损失/样本数
mse_list.append(mse)

绘图

plt.plot(w_list, mse_list)
plt.title(‘MSE-w’)
plt.xlabel(‘w’)
plt.ylabel(‘Mean Square Error’)
plt.savefig(‘w-MSE曲线图’)
plt.show()

在这里插入图片描述

以同样的方法来确定b的值 同时画出平均损失关于w和b的图像

同上一次的确定方法相比 其实只用多加一层关于b的取值循环即可

假设w的大致取值范围为[0,4] b的大致取值范围在[-2,2]

b_list = []
w_list = []
mse_list=[]
for w in np.arange(0.0, 4.1, 0.1):

for b in np.arange(-2.0, 2.1, 0.1):

    w_list.append(w)
    b_list.append(b)

    sum_mse = 0  # 用于记录w取不同值时下的mse的总和 总损失
    for x, y in zip(x_list, y_list):
        y_pred = forward(w, x)
        loss_ = loss(y, y_pred)
        sum_mse += loss_

    mse = sum_mse / len(x_list)  # 平均损失=总损失/样本数
    mse_list.append(mse)

#绘图 此时有三个维度的数据,所以应该绘制三维的图形
figure=plt.figure(‘3D Surface’,facecolor=‘lightgray’)

#设置为3D图片类型
ax3d=Axes3D(figure)
ax3d.set_title(‘MSE-b,w’)
ax3d.set_xlabel(‘w’)
ax3d.set_ylabel(‘b’)
ax3d.set_zlabel(‘MSE’)

ax3d.plot_trisurf(b_list,w_list,mse_list)
plt.savefig(‘w,b对应的MSE取值’)
plt.show()
在这里插入图片描述
个人博客链接:穷举法之平均损失值的计算

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值