主要内容

使用神经网络时间序列拟合时间序列数据

此示例说明如何使用神经网络时间序列训练浅层神经网络来拟合时间序列数据。

使用 ntstool 打开神经网络时间序列

ntstool

选择网络

您可以使用神经网络时间序列来求解三种不同类型的时间序列问题。

  • 在第一类时间序列问题中,您要根据时间序列 y(t) 的过去值和另一个时间序列 x(t) 的过去值来预测前者的将来值。这种形式的预测称为具有外因(外部)输入的非线性自回归网络(或 NARX)。

  • 在第二类时间序列问题中,只涉及一个序列。时间序列 y(t) 的将来值仅根据该时间序列的过去值进行预测。这种形式的预测称为非线性自回归(或 NAR)。

  • 第三个时间序列问题类似于第一种类型,涉及两个序列,输入序列(预测变量)x(t) 和输出序列(响应变量)y(t)。这里您想要根据 x(t) 的先前值预测 y(t) 的值,但不知道 y(t) 的先前值。

对于此示例,请使用 NARX 网络。点击选择网络 > NARX 网络

选择数据

神经网络时间序列提供了示例数据来帮助您开始训练神经网络。

要导入 pH 中和过程示例数据,请选择导入 > 更多示例数据集 > 导入 pH 中和数据集。您可以使用此数据集来训练神经网络,以使用酸碱溶液流量来预测溶液的 pH 值。如果您从文件或工作区导入自己的数据,则必须指定预测变量和响应变量。

有关导入数据的信息显示在模型摘要中。此数据集包含 2001 个时间步。预测变量有两个特征(酸碱溶液流量),响应变量有一个特征(溶液 pH 值)。

将数据分成训练集、验证集和测试集。保留默认设置。数据拆分为:

  • 70% 用于训练。

  • 15% 用于验证网络是否正在泛化,并在过拟合前停止训练。

  • 15% 用于独立测试网络泛化。

有关数据划分的详细信息,请参阅划分数据以实现最优神经网络训练

创建网络

标准 NARX 网络是一个双层前馈网络,其中在隐藏层有一个 sigmoid 传递函数,在输出层有一个线性传递函数。该网络还使用抽头延迟线来存储 x(t)y(t) 序列的先前值。您会注意到,NARX 网络的输出 y(t) 将(通过延迟)反馈给网络的输入,因为 y(t)y(t1),y(t2),...,y(td) 的函数。然而,为了有效训练,可以打开此反馈环。

由于在网络训练期间真实输出是可用的,因此可以使用如下所示的开环架构,其中使用真实输出,而不是反馈估计输出。这样有两个优点。第一,前馈网络的输入更准确。第二,生成的网络为纯前馈架构,因此可以使用更高效的算法进行训练。此网络在设计时间序列 NARX 反馈神经网络中有更详细的介绍。

层大小值定义隐藏神经元的数量。保持默认层大小值 10。将时滞值更改为 4。如果网络训练性能不佳,您可能需要调整这些数字。

您可以在网络窗格中看到网络架构。

训练网络

要训练网络,请选择训练 > 莱文贝格-马夸特法训练。这是默认训练算法,与点击训练效果相同。

对于大多数问题,都推荐使用莱文贝格-马夸特 (trainlm) 进行训练。对于含噪问题或小型问题,贝叶斯正则化 (trainbr) 可以获得更好的解,但代价是耗时更长。对于大型问题,推荐使用量化共轭梯度 (trainscg),因为它使用的梯度计算比其他两种算法使用的雅可比矩阵计算更节省内存。

训练窗格中,您可以看到训练进度。训练会一直持续,直到满足其中一个停止条件。在此示例中,训练会一直持续,直到六次连续验证迭代的验证误差大于或等于先前最小验证误差(“满足验证条件”)。

分析结果

模型摘要包含关于每个数据集的训练算法和训练结果的信息。

您可以通过生成绘图来进一步分析结果。要对误差自相关性绘图,请在绘图部分中,点击误差自相关性。自相关性图说明了预测误差在时间上是如何关联的。对于完美的预测模型,自相关函数应该只有一个非零值,并且应在零滞后时出现(此值为均方误差)。这表示预测误差彼此完全不相关(白噪声)。如果预测误差中存在显著相关性,则应该可以改进预测,这可以通过增加抽头延迟线中的延迟数量来实现。在这种情况下,除了零滞后时的 1 以外,相关性大约在零附近的 95% 置信界限范围内,因此模型看上去是足够的。如果需要更精确的结果,可以重新训练网络。这将更改网络的初始权重和偏置,并可能在重新训练后生成改进的网络。

查看输入-误差互相关性图,以获得网络性能的额外验证。在绘图部分中,点击输入-误差相关图。该输入-误差互相关性图说明误差如何与输入序列 x(t) 相关。对于完美的预测模型,所有相关性都应为零。如果输入与误差相关,则应该可以改进预测,这可以通过增加抽头延迟线中的延迟数量来实现。在这种情况下,大多数相关性都在零附近的置信边界范围内。

绘图部分中,点击响应。这显示输出、响应(目标)和误差与时间的关系。它还指示选择了哪些时间点进行训练、测试和验证。

如果您对网络性能不满意,可以执行以下操作之一:

  • 重新训练网络。

  • 增加隐藏神经元的数量。

  • 使用更大的训练数据集。

如果基于训练集的性能很好,但测试集的性能很差,这可能表明模型出现了过拟合。减小层大小(从而减少神经元的数量)可以减少过拟合。

您还可以评估基于附加测试集的网络性能。要加载附加测试数据来评估网络,请在测试部分中,点击测试模型摘要显示附加测试数据结果。您也可以生成图来分析附加测试数据结果。

生成代码

选择生成代码 > 生成简单的训练脚本以创建 MATLAB 代码,从命令行重现前面的步骤。如果您要了解如何使用工具箱的命令行功能来自定义训练过程,则创建 MATLAB 代码会很有帮助。在使用命令行函数拟合时间序列数据中,您可以更详细地研究生成的脚本。

导出网络

您可以将经过训练的网络导出到工作区或 Simulink®。您也可以使用 MATLAB Compiler™ 工具和其他 MATLAB 代码生成工具部署网络。要导出您的训练网络和结果,请选择导出模型 > 导出到工作区

另请参阅

| | | | | | | | |

主题