线性模型
本小节利用一个简单的线性模型的训练带大家了解模型训练的一些思路
训练模型基本步骤:
1.获取数据集
2.选择模型:根据数据集的情况决定要选择的模型(神经网络、决策树、普斯贝斯)
3.训练:根据训练确定权重,这里的权重可以看成确定一个数学方程里面未确定的参数,通过训练可以确定这些参数
4.用模型推理得到模型,输入新数据,可以正确推理结果
数据集的划分
数据集可以划分成:训练集、测试集
但是这样划分容易出现过拟合现象
过拟合:训练的过好会将噪音点也学习进去了,导致模型过于适应训练的数据,以至于在面对从未见过的数据时表现出较差的效果,这种现象也叫做过拟合,是机器学习中要解决的难点,所以提出泛化概念
泛化机器学习的泛化指的是模型在面对新的、未曾见过的数据时的表现能力。一个好的机器学习模型应该能够从已有的训练数据中学习到通用的模式和规律,而不是死记硬背更需要随机应变。
于是改良划分:训练集、开发集(模型评估)、测试集
如何确定方程的未知数
穷举法:
穷举参数可能取值,再输入值得到输出结果,输出结果再与实际值作差得到损失值,得到每个输入的损失值后求平均值,当平均值最小时候,此时的未知量w最贴合
损失函数图像
将损失值与权重(w)画成图像,损失值最小时候的权重符合要求
实现代码
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]
def forward(x):
return x*w
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()