用Matlab中的神经网络预测时间序列Y(t + 1)

时间:2017-02-02 22:39:08

标签: matlab neural-network time-series forecasting autoregressive-models

我有一个我分成的数据集:

  • 培训:预测变量X_TR(14个变量中的1028个记录)和Y_TR(1028记录单个变量)
  • 申请:X_APP(115 x 14),Y_APP(115x1),

其中每条记录都是时间步t。

我的目标是构建一个NN模型,该模型使用最多t的历史信息预测Y(t + 1),即 Y(T + 1)= f(X(t),X(t- 1),...,Y(0),X(T),X(T-1),...,Y(0))即可。请注意,考虑iformation不超过10个时间步是合理的。 根据mathworks.com/help/nnet/gs/neural-network-time-series-prediction-and-modeling.html,我使用X_T和Y_T训练了一个NN。

% Cell arrays inputs for NN
X = tonndata(X_TR,false,false);
T = tonndata(Y_TR,false,false); %output volumes

% training function
trainFcn = 'trainlm';  % Levenberg-Marquardt

% Create NARX
% network parameters
lags = 10;
inputDelays = 1:lags;
feedbackDelays = 1:lags;
hiddenLayerSize = 40;
% construct  NARX net
net = narxnet(inputDelays,feedbackDelays,hiddenLayerSize,'open',trainFcn);

%prepare time series
[x,xi,ai,t] = preparets(net,X,{},T);

% Training, Validation, Testing
net.divideParam.trainRatio = 60/100;
net.divideParam.valRatio = 20/100;
net.divideParam.testRatio = 20/100;

% Train the Network
[net,tr] = train(net,x,t,xi,ai);

我不知道如何应用训练有素的模型。假设培训成功,我想将模型应用于数据X_APP和Y_APP的另一部分,以便预测Y_APP(t + 1)。我怎么能这样做?

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以按照以下说明使用经过培训的网络:

% define your new input
X = tonndata(X_APP, false, false);
T = tonndata(Y_APP, false, false);

% prepare new data for usage with your net
[x,xi,ai,t] = preparets(net,X,{},T);

% generate output
y = network(x,xi,ai);

您还可以随时保存您的网并将其加载回matlab:

 goodworkingnet = net;
 save goodworkingnet