构造一个小的回归数据集:
生成 150 个带噪音的样本,其中 100 个训练样本,50 个测试样本,并打印出训练数据的可视化分布。
回归任务中常用的评估指标是均方误差
均方误差(mean-square error, MSE)是反映估计量与被估计量之间差异程度的一种度量。
【注意:代码实现中没有除2】思考:没有除2合理么?谈谈自己的看法,写到实验报告。
思考1. 为什么省略了不影响效果?
在准备了数据、模型、损失函数和参数学习的实现之后,开始模型的训练。
在回归任务中,模型的评价指标和损失函数一致,都为均方误差。
通过上文实现的线性回归类来拟合训练数据,并输出模型在训练集上的损失。
用训练好的模型预测一下测试集的标签,并计算在测试集上的损失。
(1) 调整训练数据的样本数量,由 100 调整到 5000,观察对模型性能的影响。
(2) 调整正则化系数,观察对模型性能的影响。
构建训练和测试数据,其中:
训练数样本 15 个,测试样本 10 个,高斯噪声标准差为 0.1,自变量范围为 (0,1)。
套用求解线性回归参数的方法来求解多项式回归参数
对于多项式回归,我们可以同样使用前面线性回归中定义的LinearRegression
算子、训练函数train
、均方误差函数mean_squared_error
。
通过均方误差来衡量训练误差、测试误差以及在没有噪音的加入下sin
函数值与多项式回归值之间的误差,更加真实地反映拟合结果。多项式分布阶数从0到8进行遍历。
对于模型过拟合的情况,可以引入正则化方法,通过向误差函数中添加一个惩罚项来避免系数倾向于较大的取值。
机器学习方法流程包括数据集构建、模型构建、损失函数定义、优化器、模型训练、模型评价、模型预测等环节。
为了更方便地将上述环节规范化,我们将机器学习模型的基本要素封装成一个Runner类。
除上述提到的要素外,再加上模型保存、模型加载等功能。
Runner类的成员函数定义如下:
使用线性回归来对马萨诸塞州波士顿郊区的房屋进行预测。
实验流程主要包含如下5个步骤:
Runner
用于管理模型训练和测试过程;Runner
进行模型训练和测试。from nndl.op import Linear
from nndl.opitimizer import optimizer_lsm
这两个python文件位置如下:
文件使用了paddle,改写成pytorch,并在后续工作中使用即可。
问题1:使用类实现机器学习模型的基本要素有什么优点?
问题2:算子op、优化器opitimizer放在单独的文件中,主程序在使用时调用该文件。这样做有什么优点?
问题3:线性回归通常使用平方损失函数,能否使用交叉熵损失函数?为什么?
ref:
NNDL 实验二(上) - HBU_DAVID - 博客园 (cnblogs.com)
NNDL 实验二(下) - HBU_DAVID - 博客园 (cnblogs.com)
3. 线性神经网络 — 动手学深度学习 2.0.0-beta1 documentation (d2l.ai)