主要内容

浅神经网络时间序列预测和建模

动态神经网络擅长时间系列的预测。看到的例子使用NARX网络被应用于开环形式,闭环和开/闭环形式多步预测,明白了神经网络多步预测

提示

深度学习的时间序列数据,请参阅使用深度学习序列分类

例如,假设你有酸碱中和过程的数据。你想设计一个网络,可以预测溶液的pH值在一辆坦克从过去的pH值和过去的酸和碱值流量进入油箱。你有2001的时间步骤,你有这些系列。

你可以解决这个问题在两个方面:

一般来说,最好先从应用程序,然后使用应用程序自动生成的命令行脚本。在使用方法之前,首先定义通过选择一个数据集的问题。每个神经网络应用程序能够访问几个样本数据集,您可以使用与工具箱(见实验浅神经网络的样本数据集)。如果你有一个你想解决具体的问题,你可以将自己的数据加载到工作区。

时间序列网络

你可以训练一个神经网络来解决三种类型的时间序列问题。

NARX网络

在第一种时间序列问题,你想要的时间序列预测未来值y(t)从过去的值时间序列和过去值的第二个时间序列x(t)。这种形式的预测被称为非线性自回归与外生(外部)输入,或NARX(见设计时间序列NARX神经网络的反馈),可以编写如下:

y(t)=f(y(t- 1)、…y(t- - - - - -d),x(t- 1)、…(t- - - - - -d))

使用这个模型来预测未来值的股票或债券,失业率等经济变量的基础上,国内生产总值,等。你也可以使用这个模型对系统识别、开发模型来表示动态系统,如化学过程、制造系统、机器人、航空航天车辆等。

NAR网络

第二种类型的时间序列问题,只有一个系列。未来的时间序列值y(t)预计只有从过去值的系列。这种形式的预测被称为非线性自回归,投资,可以编写如下:

y(t)=f(y(t- 1)、…y(t- - - - - -d))

您可以使用这个模型来预测金融工具,但没有使用一系列的同伴。

非线性输入输出网络

第三次系列问题是类似于第一种,在这两个系列,一个输入系列x(t)和一个输出系列y(t)。在这里你想预测的值y(t从先前的值)x(t),但是没有知识之前的值y(t)。这个输入/输出模型可以写成:

y(t)=f(x(t- 1)、…x(t- - - - - -d))

NARX模型将提供比这个投入产出模型更好的预测,因为它使用的附加信息包含在前面的值y(t)。但是,可能会有一些应用程序之前的值y(t)将不可用。这是唯一的情况下,要使用投入产出模型而不是NARX模型。

定义一个问题

定义一个时间序列问题的工具箱,安排一组时间序列的预测单元阵列中的列向量。然后,安排另一组时间序列响应向量(正确的响应向量的预测向量)第二单元阵列。此外,在某些情况下,你只需要有一个响应数据集。例如,您可以定义以下时间序列问题,你想用之前的一系列的值来预测未来值:

反应= {1 2 3 4 5};

下一节将展示如何训练网络,以适应时间序列数据集,使用神经网络时间序列应用。这个例子使用工具箱提供的示例数据。

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

这个例子展示了如何培养一个浅神经网络以适应时间序列数据使用神经网络时间序列应用程序。

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

ntstool

选择网络

您可以使用神经网络时间序列应用程序来解决三种不同的时间序列问题。

  • 在第一种时间序列问题,你想要的时间序列预测未来值 y ( t ) 从过去的值的时间序列和过去值的第二个时间序列 x ( t ) 。这种形式的预测被称为非线性自回归网络与外生(外部)输入,或NARX。

  • 第二种类型的时间序列问题,只有一个系列。未来的时间序列值 y ( t ) 预计只有从过去值的系列。这种形式的预测被称为非线性自回归,或NAR。

  • 第三次系列问题是类似于第一种,在这两个系列,一个输入系列(预测) x ( t ) 系列和一个输出(响应) y ( t ) 。在这里你想预测的值 y ( t ) 从之前的值 x ( t ) 没有知识的,但之前的值 y ( t )

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

选择数据

神经网络时间序列应用程序示例数据帮助你开始训练一个神经网络。

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

导入的数据中出现的信息模型的总结。这些数据集包含2001时间步。预测有两个特性(酸和碱溶液流)和反应(溶液pH值)有一个特性。

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

  • 70%的训练。

  • 15%验证网络推广和过度拟合之前停止训练。

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

数据部分的更多信息,请参阅把最优的神经网络训练数据

创建网络

标准NARX网络是一个两层的前馈网络,乙状结肠传递函数的隐层和输出层的线性传递函数。这个网络还使用了延迟线路之前存储的值 x ( t ) y ( t ) 序列。注意,NARX网络的输出, y ( t ) ,反馈网络的输入(通过延迟) y ( t ) 是一个函数的 y ( t - - - - - - 1 ) , y ( t - - - - - - 2 ) , , y ( t - - - - - - d ) 。然而,对于有效训练这个反馈回路可以打开。

因为真正的输出可用网络的训练期间,您可以使用如下所示的开环结构,在真正的输出是用来代替反馈估计的输出。这有两个优点。首先,输入前馈网络是更准确的。第二,结果有一个纯粹的前馈网络架构,因此一个更高效的算法可用于培训。这个网络将更详细地讨论设计时间序列NARX神经网络的反馈

层的大小值定义隐藏神经元的数量。保持默认的图层大小,10。改变时间延迟价值4。您可能需要调整这些数字,如果网络训练性能很差。

你可以看到的网络体系结构网络窗格。

列车网络的

训练网络,选择火车>火车与Levenberg-Marquardt。这是默认训练算法和点击相同火车

培训与Levenberg-Marquardt (trainlm)建议对大多数问题。噪声或小问题,贝叶斯正规化(trainbr)可以获得一个更好的解决方案,在长时间的成本。对于大型问题,比例共轭梯度(trainscg)推荐,因为它使用梯度计算更多的内存效率比其他两种算法使用雅可比矩阵计算。

培训窗格中,您可以看到培训的进展。培训持续进行直到满足停止条件之一。在这个例子中,培训持续进行直到验证错误增加连续六个迭代(“满足验证准则”)。

分析结果

模型的总结包含的信息为每个数据集训练算法和训练的结果。

您可以进一步分析结果通过生成的情节。绘制误差自相关,情节部分中,点击误差自相关。自相关图描述了相关的预测错误。为一个完美的预测模型,只应该有一个非零值自相关函数,它应该发生在零延迟(这是均方误差)。这就意味着相互完全不相关的预测错误(白噪声)。如果有显著相关性的预测错误,那么它应该可以提高预测——可能通过增加数量的抽头延迟线延迟。在这种情况下,相关性,除了在零延迟,下跌约95%置信区间内的零,所以模型似乎是足够的。如果需要更准确的结果,你可以再培训网络。这将改变网络的初始重量和偏见,并可能产生一种改进的网络后再培训。

查看输入误差互相关阴谋获得额外的网络性能验证。在情节部分中,点击输入错误的相关性。输入错误的互相关情节说明了错误与输入序列 x ( t ) 。为一个完美的预测模型,所有的相关性应该是零。如果输入是与错误,那么它应该可以改善预测,也许通过增加抽头延迟延误的行数。在这种情况下,大多数的相关性的信心在零附近。

情节部分中,点击响应。反应(目标),这显示输出和错误和时间。它还表明这时间点被选为培训、测试和验证。

如果你是不满意的网络性能,你可以做以下之一:

  • 再次培训网络。

  • 增加隐藏的神经元。

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

如果性能在训练集是好的但测试集的性能很差,这可能表明模型过度拟合。减少层大小,因此减少神经元的数量,可以减少过度拟合。

你也可以评估额外的测试集上的网络性能。加载额外的测试数据来评估网络,测试部分中,点击测试。的模型的总结显示附加的测试数据结果。你也可以产生额外的情节分析测试数据的结果。

生成代码

选择生成代码>生成简单的培训脚本创建MATLAB代码复制从命令行前面的步骤。创建MATLAB代码是很有用的,如果你想学习如何使用命令行功能的工具箱来定制培训过程。在合适的时间序列数据使用命令行功能,您将更详细地研究生成的脚本。

出口网络

你可以导出你的训练网络工作区或仿真软件®。金宝app你也可以用MATLAB编译器部署网络™工具和其他MATLAB代码生成工具。出口培训网络和结果,选择出口模式>出口到工作区

合适的时间序列数据使用命令行功能

最简单的方法来学习如何使用命令行功能的工具箱是生成脚本的应用程序,然后修改它们定制网络培训。作为一个例子,看看生成的简单的脚本在前一节中使用神经网络时间序列应用程序。

%解决一个自回归问题与外部输入NARX神经网络%神经时间序列生成的脚本程序% 13 - 2021年5月——17:34:27创建%%这个脚本假设这些变量定义:%% phInputs——输入时间序列。% phTargets——反馈时间序列。X = phInputs;T = phTargets;%选择培训功能%为所有培训功能的列表类型:帮助nntrain%的trainlm通常是最快的。%的trainbr花费更长的时间,但是这可能是更好的具有挑战性的问题。%的trainscg使用更少的内存。在低内存的情况下适用。trainFcn =“trainlm”;% Levenberg-Marquardt反向传播。%建立一个非线性自回归网络与外部输入inputDelays = 1:4;feedbackDelays = 1:4;hiddenLayerSize = 10;网= narxnet (inputDelays feedbackDelays hiddenLayerSize,“开放”,trainFcn);%为训练和仿真数据%的函数PREPARETS准备timeseries数据为一个特定的网络,%转移最少填满时间的输入状态和层%。使用PREPARETS可使你保持原始时间序列数据%不变,而轻松地定制它与不同的网络%的延迟,与开环或闭环反馈模式。[x, xi,人工智能,t] = preparets(净,x, {}, t);%设置部门的数据进行训练、验证测试net.divideParam。火车Ratio = 70/100; net.divideParam.valRatio = 15/100; net.divideParam.testRatio = 15/100;%训练网络(净,tr) =火车(净,x, t, xi, ai);%测试网络净(y = x, xi, ai);e = gsubtract (t、y);性能=执行(净、t、y)%查看网络视图(净)%的情节%取消这些线,使各种各样的情节。%,plotperform (tr)%,plottrainstate (tr)%,ploterrhist (e)%,plotregression (t, y)%,plotresponse (t, y)%,ploterrcorr (e)%,plotinerrcorr (x, e)%闭环网络%使用这个网络进行多步预测。%的函数CLOSELOOP取代了反馈和直接输入%从输出层连接。netc = closeloop(净);netc.name = [net.name”——闭环”];视图(netc) (xc、xic aic, tc) = preparets (netc, X, {}, T);yc = netc (xc、xic aic);closedLoopPerformance =执行(净、tc、yc)%提前预测网络%对于某些应用程序有助于早期预测一个步伐。%原网络收益预测y (t + 1)在同一时间%给y (t + 1)。对于某些应用程序,如决策、%有助于预测y (t + 1) y (t)是可用的,但是之前%实际y (t + 1)。网络可以返回它的输出%步伐早期通过移除一个延迟,使其最小抽头延迟是现在% 0,而不是1。新的网络返回相同的输出与原始%网络,但输出左移一个步伐。网= removedelay(净);nets.name = [net.name”——预测领先一步”];视图(网)[X,切除酶、ais ts] = preparets(网,X, {}, T);y =网(xs,切除酶,ais);stepAheadPerformance =执行(网、t、y)

您可以保存脚本,然后从命令行运行它繁殖的结果之前的应用程序会话。你也可以编辑脚本定制培训过程。在这种情况下,在脚本中执行的每个步骤。

选择数据

该脚本假设预测和响应向量已经加载到工作区。如果数据没有加载,您可以加载它如下:

负载ph_dataset
这个命令加载预测pHInputs和反应pHTargets进入工作区。

这个数据集的样本数据集的工具箱的一部分。可用的数据集的信息,看到浅神经网络的样本数据集。你也可以看到所有可用的列表数据集通过输入命令帮助nndatasets。你可以从这些数据集加载变量使用自己的变量名。例如,命令

[X, T] = ph_dataset;
将加载pH值数据集预测单元阵列X和pH值的数据集反应单元阵列T

选择训练算法

定义训练算法。网络使用默认Levenberg-Marquardt算法(trainlm)培训。

trainFcn =“trainlm”;% Levenberg-Marquardt反向传播。

问题中Levenberg-Marquardt不会产生所需的准确的结果,或大数据问题,考虑设置网络训练贝叶斯正则化函数(trainbr)或按比例缩小的共轭梯度(trainscg),分别

网。trainFcn = 'trainbr'; net.trainFcn = 'trainscg';

创建网络

创建一个网络。NARX网络,narxnet,是一个前馈网络默认tan-sigmoid隐层传递函数和线性传递函数在输出层。这个网络有两个输入。一个是外部输入,另一个是反馈连接的网络输出。网络训练后,这个反馈连接可以关闭时,您将看到在稍后的一步。对于每一个输入,一个抽头延迟线来存储以前的值。分配NARX网络的网络体系结构,您必须选择与每个抽头延迟线,相关的延迟和隐层神经元的数目。在以下步骤中,您指定的输入延迟和反馈延迟范围从1到4和隐藏的神经元的数量是10。

inputDelays = 1:4;feedbackDelays = 1:4;hiddenLayerSize = 10;网= narxnet (inputDelays feedbackDelays hiddenLayerSize,“开放”,trainFcn);

请注意

增加神经元的数量和延误的数量需要更多的计算,这倾向于overfit数据时的数据设置过高,但它允许网络来解决更复杂的问题。层需要更多的计算,但其使用可能导致网络更有效地解决复杂的问题。使用多个隐层,输入隐藏层大小的数组元素narxnet命令。

准备培训资料

数据准备培训。培训包含了网络延迟线路时,必须填满延迟初始值预测和响应的网络。有一个工具箱命令,促进这一过程preparets。这个函数有三个输入参数:网络,预测和响应。函数返回所需的初始条件来填补抽头延迟线路网络,和修改预测和响应序列,在初始条件已被移除。你可以调用的函数如下:

[x, xi,人工智能,t] = preparets(净,x, {}, t);

把数据

设置部门的数据。

net.divideParam。火车Ratio = 70/100; net.divideParam.valRatio = 15/100; net.divideParam.testRatio = 15/100;

这些设置,数据将被随机划分,有70%用于培训,15%的验证和测试为15%。

列车网络的

培训网络。

(净,tr) =火车(净,x, t, xi, ai);

在培训过程中,培训窗口打开。这个窗口显示了培训进展和允许中断在任何时候通过点击停止训练

这种培训验证错误时停止增加连续六个迭代。

测试网络

测试网络。网络训练后,您可以使用它来计算网络输出。下面的代码计算出网络输出,错误,和总体性能。注意,与抽头延迟线来模拟一个网络,你需要分配这些延迟信号的初始值。这样做是与输入状态(州()和层人工智能提供的)preparets在早期阶段。

净(y = x, xi, ai);e = gsubtract (t、y);性能=执行(净、t、y)
性能= 0.0147

查看网络

查看网络图。

视图(净)

分析结果

绘制性能培训记录检查潜在的过度拟合。

图中,plotperform (tr)

这个数字表明,训练和验证错误减少到高亮显示的时代。它没有出现任何发生过度拟合,因为验证错误不增加这个时代之前。

所有的培训都是在开环(也称为串并联结构),包括验证和测试步骤。典型的工作流是完全建立在开环网络,,只有当它被训练(包括验证和测试步骤)转换为multistep-ahead闭环预测。同样,R中的值神经网络时代系列基于开环应用计算训练的结果。

闭环网络

关闭循环NARX网络。当反馈回路打开NARX网络,它是执行一个领先一步预测。它是预测未来的价值y(t从先前的值)y(t),x(t)。反馈回路关闭,它可以用来执行multi-step-ahead预测。这是因为的预测y(t)将用于实际的未来值y(t)。可以使用以下命令关闭循环,计算闭环性能

netc = closeloop(净);netc.name = [net.name”——闭环”];视图(netc) (xc、xic aic, tc) = preparets (netc, X, {}, T);yc = netc (xc、xic aic);closedLoopPerformance =执行(净、tc、yc)
closedLoopPerformance = 1.3979

提前预测网络

删除从网络延迟,早期预测一个时间步。

网= removedelay(净);nets.name = [net.name”——预测领先一步”];视图(网)[X,切除酶、ais ts] = preparets(网,X, {}, T);y =网(xs,切除酶,ais);stepAheadPerformance =执行(网、t、y)
stepAheadPerformance = 0.0147

从这个图中,您可以看到网络之前的开环网络是一样的,除了一个延迟已被删除从每个抽头延迟线。网络的输出y(t+ 1)代替y(t)。有时这可能是有用的,当一个网络部署特定的应用程序。

下一个步骤

如果网络性能不满意,你可以试试这些方法:

  • 重置初始网络权值和新值的偏差初始化并再次培训。

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

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

  • 增加输入值的数量,如果更多的相关信息是可用的。

  • 尝试不同的训练算法(见训练算法)。

在命令行操作来获得更多的经验,尝试一些这样的任务:

每次神经网络训练会导致一个不同的解决方案由于随机初始重量和偏见价值观和不同部门的数据训练,验证集和测试集。结果,不同的神经网络训练同样的问题可以给不同的相同的输入输出。确保神经网络良好的准确性已经发现,培训几次。

还有其他几个技术改进初始解决方案如果需要更高的精度。金宝搏官方网站有关更多信息,请参见改善浅神经网络泛化,避免过度拟合

另请参阅

|||||||||

相关的话题