通过 numpy包穷举找到线性模型的预测的w值,并用matplotlib包画出线性预测效果。
1、实现y=x*w线性回归预测。本例题中有学习成绩关于学习时长的一组数据,其满足线性模型,通过此数据训练一个线性模型,并用训练完的模型做预测,预测时长x=4时,成绩y=?。关键是求解出w的值,w的值知道了其线性模型就确定了。
如下图所示:
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然后求和再求平均。
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()
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()
以上是本人的浅显见解,还请多多指教。