2、线性回归预测模型的实现(linear model)y=x*w+b

线性回归预测模型的实现(linear model)y=x*w+b

通过 numpy包穷举找到线性模型的预测的w和b值,并用matplotlib和mpl_toolkits包画出在训练过程中w、b、loss的三维变化。
1、实现y=x*w + b线性回归预测。关键是求解出w和b的值,w和b的值知道了其线性模型就确定了。
如下图所示:

xy
15
28
311

在这里插入图片描述

2、训练模型需要调用的包和原始数据(存于列表中,为浮点型),还包括通过调用numpy包中的函数实现穷举w和b的值,并将值存入矩阵中,便于后面进行矩阵运算。#pic_center

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]

#并且设置穷举值,W、B,为一维array数组(通过向量表示),然后合并到矩阵中,[w,b]=np.meshgrid(W,B)。
mse_list = []
W=np.arange(0.0,4.1,0.1)  #w值变化的范围
B=np.arange(0.0,4.1,0.1)  #b值变化的范围
[w,b]=np.meshgrid(W,B)

3、模型在训练过程中,计算损失值loss的方法,用预测值-真实值的平方。
MSE表示平均损失,用cost表示计算,过程是计算每个样本的loss然后求和再求平均。
在这里插入图片描述

4、下面两个自定义函数,forward函数表示对线性模型进行预测,loss函数表示计算每个样本的损失值。

#预测,得到的是y预测值,y = x*w + b
def forward(x):
    return x * w + b

#损失函数,平方来表示,,,,cost为误差
def loss(x,y):
    y_pred = forward(x)
    return (y_pred-y)*(y_pred-y)

5、下面是经过简单的穷举法,也可理解为循环遍历所有的样本数据,找出适合样本数据的w、b值,计算每个样本数据的损失值。并将每个w和b对应的损失值求和存于l_sum中,便于后面的画图。

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 #因为只有3个样本数据所以除以3

6、数据可视化(画图),画出3维的立体图。

fig = plt.figure()
ax = Axes3D(fig)
ax.plot_surface(w, b, l_sum/3)
# 设置坐标轴标签
ax.set_xlabel("w")
ax.set_ylabel("b")
ax.set_zlabel("loss")
plt.show()

在这里插入图片描述

该线性回归预测模型的完整程序,y = x*w + b
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

#损失函数,平方来表示,,,,cost为误差
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)  #w值变化的范围
B=np.arange(0.0,4.1,0.1)  #b值变化的范围
[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)
# 设置坐标轴标签
ax.set_xlabel("w")
ax.set_ylabel("b")
ax.set_zlabel("loss")
plt.show()

以上是本人的浅显见解,还请多多指教。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值