Wy does sim function give such bad results after making a neural network timeserie?

2 visualizaciones (últimos 30 días)
Hi everyone,
I have a question about forecasting using neural network timeseries tool(ntstool).
I am working with a timeserie dataset. I have an input dataset of 217 rows and 24 columns (217x24 matrix) and a target dataset of 217 rows and 1 column (217x1 matrix).All values are numbers
So I go to ntstool and using narx for creating the network. After running the network adjusted dividerand into divideblock and run the script again. The network gave good validation and testing results. This is the code that came with it:
% input - input time series. output - feedback time series.
inputSeries = tonndata(input,false,false);
targetSeries = tonndata(output,false,false);
% Create a Nonlinear Autoregressive Network with External Input
inputDelays = 1:3;
feedbackDelays = 1:3;
hiddenLayerSize = 15;
net = narxnet(inputDelays,feedbackDelays,hiddenLayerSize);
% Choose Input and Feedback Pre/Post-Processing Functions
net.inputs{1}.processFcns = {'removeconstantrows','mapminmax'};
net.inputs{2}.processFcns = {'removeconstantrows','mapminmax'};
% Prepare the Data for Training and Simulation
[inputs,inputStates,layerStates,targets] = preparets(net,inputSeries,{},targetSeries);
% Setup Division of Data for Training, Validation, Testing
net.divideFcn = 'divideblock';
net.divideMode = 'value';
net.divideParam.trainRatio = 70/100;
net.divideParam.valRatio = 15/100;
net.divideParam.testRatio = 15/100;
% Choose a Training Function
net.trainFcn = 'trainlm';
% Choose a Performance Function
net.performFcn = 'mse';
% Choose Plot Functions
net.plotFcns = {'plotperform','plottrainstate','plotresponse', ... 'ploterrcorr', 'plotinerrcorr'};
% Train the Network
[net,tr] = train(net,inputs,targets,inputStates,layerStates);
% Test the Network
outputs = net(inputs,inputStates,layerStates);
errors = gsubtract(targets,outputs);
performance = perform(net,targets,outputs)
% Recalculate Training, Validation and Test Performance
trainTargets = gmultiply(targets,tr.trainMask);
valTargets = gmultiply(targets,tr.valMask);
testTargets = gmultiply(targets,tr.testMask);
trainPerformance = perform(net,trainTargets,outputs)
valPerformance = perform(net,valTargets,outputs)
testPerformance = perform(net,testTargets,outputs)
% View the Network
view(net)
% Closed Loop Network
netc = closeloop(net);
netc.name = [net.name ' - Closed Loop'];
view(netc)
[xc,xic,aic,tc] = preparets(netc,inputSeries,{},targetSeries);
yc = netc(xc,xic,aic);
closedLoopPerformance = perform(netc,tc,yc)
% Early Prediction Network
nets = removedelay(net);
nets.name = [net.name ' - Predict One Step Ahead'];
view(nets)
[xs,xis,ais,ts] = preparets(nets,inputSeries,{},targetSeries);
ys = nets(xs,xis,ais);
earlyPredictPerformance = perform(nets,ts,ys)
Now with this code I was ready for simulation. I took a sample row of the input dataset (24x1) and use the sim function to simulate the target:
adjusted_rowsample = mapminmax(rowsample);
simulate = tonndata(adjusted_rowsample,false,false);
samplerow_result = sim(netc,simulate).
The result wasnt even close to the target output as it was used in the network. Also when simulate new target value with new input values (24x1) from the next day ( this has not been used for training,validation or testing) the result is no where near the target.
What did I do wrong? How can I get the right target result using sim function?
And why does using sim(net,simulate) give me the error 'Number of inputs does not match net.numInputs.'? Which one to use: net or netc?
Can someone answer these questions?(On forum or private). I would very much appreciate it.

Respuesta aceptada

Greg Heath
Greg Heath el 19 de Sept. de 2013
1. Remove all unnecessary specification of defaults. If you don't know which are defaults, type your net = narxnet command without the semicolon and investigate the results
2. Add a RNG initialization statement
3. Apply your code to the MATLAB time-series data set that best represents your problem.
help nndatasets
4. If results are poor, run it a few more times to make sure it is not because of the random weight initialization.
5. Still bad? Post relevant code and error messages.
Hope this helps.
Thank you for formally accepting my answers
Greg

Más respuestas (0)

Categorías

Más información sobre Sequence and Numeric Feature Data Workflows en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by