how can use static feedforward neural network to predict futre observation

4 visualizzazioni (ultimi 30 giorni)
As newff the appropriate choice or we must use others functions like feedforwardnet???

Risposta accettata

Greg Heath
Greg Heath il 30 Mag 2015
The generic NEWFF and special cases that call it (e.g., NEWFIT(regression/curvefitting) and NEWPR(Classification/pattern-recognition) ) are obsolete.
Use the current special cases FITNET(regression/curvefitting) and PATTERNNET(Classification/pattern-recognition,...) that call the generic FEEDFORWARDNET.
In your case it looks like FITNET.
However, why don't you want to use a dynamic net?
Hope this helps.
Thank you for formally accepting my answer
Greg
  5 Commenti
coqui
coqui il 6 Giu 2015
Dear Greg, I used FITNET to predict future value by assuming only one delay (lag) as the network is static.
this assumption is right?
Thanks
coqui
coqui il 30 Giu 2015
I try to predict next value of index using fitnet.
my data representing 3263 observations.
I have defined the input as the first 3262 observations (P=data(1:3262) while target is defined as (T=data(2:3263)).
this data partition is right?
Also I have used these code, can you verify with me.
P=data(1:3262);
T=data(2:3263);
inputs = P';
targets = T'; hiddenLayerSize = 10;
net = fitnet(hiddenLayerSize);
net.inputs{1}.processFcns = {'removeconstantrows','mapminmax'};
net.outputs{2}.processFcns = {'removeconstantrows','mapminmax'};
net.divideFcn = 'divideblock'; % Divide data randomly
net.divideMode = 'sample'; % Divide up every sample
net.divideParam.trainRatio = 70/100;
net.divideParam.valRatio = 10/100;
net.divideParam.testRatio = 20/100;
net.trainFcn = 'trainlm';
net.performFcn = 'mse';
[net,tr] = train(net,inputs,targets);
outputs = net(inputs);
errors = gsubtract(targets,outputs);
performance = perform(net,targets,outputs)

Accedi per commentare.

Più risposte (2)

Greg Heath
Greg Heath il 30 Giu 2015
Use one of these
help nndatasets (Also see : doc nndatasets)
Single time-series prediction involves predicting the next value of a time-series given its past values.
simplenar_dataset - Simple single series prediction dataset.
chickenpox_dataset - Monthly chickenpox instances dataset.
ice_dataset - Gobal ice volume dataset.
laser_dataset - Chaotic far-infrared laser dataset.
oil_dataset - Monthly oil price dataset.
river_dataset - River flow dataset.
solar_dataset - Sunspot activity dataset
Unlike the datasets for FITNET, PATTERNNET and NARXNET, I have not posted these NARNET data set sizes in the NEWSGROUP.
Word to the wise:
ALWAYS begin using ALL of the defaults. This will simplify your code so much that you will think that you know what you are doing. To see what I mean see the documentation examples at
help fitnet % default H = 10
doc fitnet
and
help narnet % defaults FD = 1:2, H = 10
doc narnet
TYPICALLY, the only default you may have to change is, H, the number of hidden nodes!
However, if that doesn't work you may have to
1. Design 10 or more nets to mitigate unfortunate choices of random initial weights and random data divisions.
2. Determine the statistically significant lags from the target autocorrelation function as I have posted in the NEWSGROUP.
Hope this helps
If you want to accept this answer instead of the previous one, I don't mind
Greg
  1 Commento
coqui
coqui il 2 Lug 2015
Thank you Greg.
In fact, I have no problem to define optimal hidden neurons ( using trial and error) for fitnet model.
I want just to verify if my input and target vectors are right???
I have defined the input as the first 3262 observations (P=data(1:3262) while target is defined as (T=data(2:3263)).
this data partition is right?

Accedi per commentare.


Greg Heath
Greg Heath il 2 Lug 2015
If you want to use the static net FITNET to predict d timesteps ahead of a single N timestep timeseries, use defaults and double ( NOT CELL ) variables
input = data( 1:N-d); % No transpose;
target = data( 1+d : N );
MSE00 = var(target',1) % Reference MSE
net = fitnet; % default H = 10
net.divideParam.valRatio = 10/100;
net.divideParam.testRatio = 20/100;
[net tr output error ] = train(net, input, target);
%output = net(input); error = target - output;
NMSE = mse(error)/MSE00 % Range [ 0 1 ]
R2 = 1- NMSE
% Rsquared = fraction of target variance modeled by the net
Hope this helps.
Greg
  11 Commenti
Greg Heath
Greg Heath il 6 Lug 2015
I think that using narnet is better than usin fitnet for timeseries because you can close the loop and predict well beyond the time of the target.

Accedi per commentare.

Categorie

Scopri di più su Sequence and Numeric Feature Data Workflows in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by