Improving NARX network results

4 views (last 30 days)
I developed a NARX network for modeling a UASB reactor and predicted for three different output parameters for 11 timesteps with one-step ahead approach. While some of the predictions are well within range, some of them show unacceptable levels of difference between target and output. I used different combination in both hidden layers and delaysizes. The results did not improve. Should i incorporate something else into the code to improve the training of the neural network?? or improve the results using a filter (Kalman etc.) or use a different model (Neuro-Fuzzy or Hybrid) altogether to solve the problem?? Configuration of the network is 5-12-12-3 Training dataset consists of set of data at 100 timesteps.

Accepted Answer

Greg Heath
Greg Heath on 31 Jul 2014
One hidden layer is sufficient
net = narxnet(ID,FD,H)
For details, search using
greg narxnet
and
greg narx
Use the significant lags of the target autocorrelation function and the target/input crosscorrelation function to determine ID and FD.
Determine the upperbound for number of hidden nodes, Hub that guarantees the number of training equations, Ntrneq, exceeds the number of unknown weights, Nw.
Use 'divideblock' or 'divideind' to preserve the spacing between data points.
For fixed ID,FD find the minimum value for H that will yield satisfactory performance. If H << Hub is not satisfied, use a validation set or regularization (msereg, trainbr) to prevent overtraining an overfit net.
Initialize the RNG so that designs can be duplicated.
Normalize MSE by the average target variance MSE00 = mean(var(t',1)) to obtain a scale-free performance measure NMSE.
Use the training record tr to divide performance into trn/val/tst components.
Hope this helps.
Thank you for formally accepting my answer
Greg
  7 Comments
Greg Heath
Greg Heath on 4 Oct 2014
Edited: Greg Heath on 4 Oct 2014
Your response "Yes I did that exactly" is curious because I do not see any of that above. Most importantly, you are complaining about premature termination yet you did not answer my very relevant question
tr.stop = ?
Why would you use the command tr=tr with a semicolon???
Also you originally metioned I = 5 and O=3. However, your code is SISO.
What is N?
I think you need to find the MATLAB data that can most demonstrate your problem.
help nndata
Then we can compare results.
Greg
Greg Heath
Greg Heath on 4 Oct 2014
What is the result of the command "whos" in the following
u= xlsread('inputs111.xls');
y= xlsread('outputs111.xls');
x = tonndata(u,true,false);
t = tonndata(y,true,false);
whos
Please apply your code to the pollution_data set. Although
size(input) = [ 8 508 ]
size(target = [ 3 508 ]
If you wish, you can only use I = 5 to match your data.
Greg

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!