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

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

通过 numpy包穷举找到线性模型的预测的w值,并用matplotlib包画出线性预测效果。
1、实现y=x*w线性回归预测。本例题中有学习成绩关于学习时长的一组数据,其满足线性模型,通过此数据训练一个线性模型,并用训练完的模型做预测,预测时长x=4时,成绩y=?。关键是求解出w的值,w的值知道了其线性模型就确定了。
如下图所示:
1、线性回归预测模型的实现(linear model)y=x*w_第1张图片
2、训练模型需要调用的包和原始数据(存于列表中,为浮点型)。#pic_center

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]

3、模型在训练过程中,计算损失值loss的方法,用预测值-真实值的平方。
MSE表示平均损失,用cost表示计算,过程是计算每个样本的loss然后求和再求平均。
1、线性回归预测模型的实现(linear model)y=x*w_第2张图片

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

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

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

5、下面是经过简单的穷举法,找出适合样本数据的w值,即 for w in np.arange(0.0, 4.1, 0.1):。在穷举过程中打印w值,x真实值,y真实值,y对应的预测值,该w下的loss值:( x_val, y_val, y_pred_val, 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)

6、数据可视化(画图),将穷举的w值,l_sum / 3:每个样本的损失值,分别.append()到两个列表中存储起来,便于下面通过图像可视化展现。

plt.plot(w_list, mse_list)
plt.ylabel('Loss')
plt.xlabel('w')
plt.show()

1、线性回归预测模型的实现(linear model)y=x*w_第3张图片

该线性回归预测模型的完整程序

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]

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

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


# 穷举法
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()

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

你可能感兴趣的:(深度学习的基础理论,pytorch,深度学习,python)