Uploaded by ahmed awsi

[System Identification] Why NARX neural network and Hammerstein-Wiener model perform badly than simple sigmoid network nonlin... - MATLAB Answers - MATLAB Central

advertisement
MATLAB Answers
[System Identification] Why NARX neural network and Hammerstein-Wiener model perform badly than simple sigmoid network
nonlinearity estimator on any predictions?
 Follow
6 views (last 30 days)
Jason Shen on 10 Aug 2020
 Vote 0
 Flag
I am currently working on dynamic modeling and exploring different techniques and algorithm to deploy a dynamic time-series black-box model.
My data looks like following: I have 7 inputs and 1 outputs (MISO system), the measurments contains delay and white noises already. I also separate the training and test/validation data
into 80/20 from 1800 data.
I have also noticed that the order estimation for NARX modeling is very important. Thus I used arxstruc and selstruc functions to select model order, which are not very accurate.
However, it is computational heavy to find any nonlinear regressors and narxnet cannot specify different model order in regard to multiple inputs, which makes the model prediction to
suffer, even worst than normal neural network without timeseries.
Do you have any suggestions, how I can find accurate estimated model order, espically for nonlinear regressors? Are there any existing algorithm other than AIC and IV method, which I
tried both of them?
I have tried using these kernels and methodologies to estimate the NARX model parameter. For validations I used compare function and NRMSE to display the goodness of the fit:
Treepartition: around 53% NRMSE
Treepartition= nlarx(train_data,model_order, treepartition);
 Theme
 Copy
 Theme
 Copy
 Theme
 Copy
Sigmoidnet: around 65% NRMSE
NL = sigmoidnet('NumberOfUnits',30);
opt = nlarxOptions('SearchMethod','gna');
opt.Regularization.Lambda = 5e-8;
Sigmoid = nlarx(train_data,model_order,NL,opt);
NARX Feedforward Neural network, using nlarx function: around 45% NRMSE
setdemorandstream(491218381);
ff = feedforwardnet([10 20]);
ff.layers{2}.transferFcn = 'radbas';
ff.trainParam.epochs = 50;
ff.divideFcn = 'dividerand' % Divide data randomly
ff.divideMode = 'sample'; % Divide up every sample
ff.divideParam.trainRatio = 0.7;
ff.divideParam.valRatio = 0.15;
ff.divideParam.testRatio = 0.15;
FFNN = nlarx(train_data,model_order, neuralnet(ff));
Cascade Neural network: around 57% NRMSE
net = cascadeforwardnet([20]);
 Theme
 Copy
 Theme
 Copy
 Theme
 Copy
 Theme
 Copy
net_estimator = neuralnet(net);
Cascade_50 = nlarx(train_80, nn_50, net_estimator);
Hammerstein-Wiener model: around 49% NRMSE
opt = nlhwOptions();
opt.SearchMethod = 'gna'; %Gauss-Newton search
opt.SearchOptions.MaxIterations = 20;
opt.Regularization.Lambda = 1e-8;
HWOptSigW = nlhw(train_data,model_order, sigmoidnet, wavenet, opt); % 51.7% NRMSE
HWOptSig = nlhw(train_data,model_order, sigmoidnet, sigmoidnet, opt); % 47% NRMSE
Normal Neural network without timeseries: around 39% NRMSE
setdemorandstream(491218381);
trainFcn = 'trainlm';
% Levenberg-Marquardt backpropagation.
hiddenLayerSize = [10 20];
net_ANN = fitnet(hiddenLayerSize,trainFcn);
net_ANN.divideFcn = 'dividerand' %'divideind'; % Divide data randomly
net_ANN.divideMode = 'sample'; % Divide up every sample
net_ANN.divideParam.trainRatio = 70/100;
net_ANN.divideParam.valRatio = 15/100;
net_ANN.divideParam.testRatio = 15/100;
net_ANN.layers{2}.transferFcn = 'radbas';
net_ANN.performFcn = 'mse';
% Train the Network
[net_ANN,tr] = train(net_ANN,x,t);
Timeseries NARX Neural network, using narxnet function: around 12% NRMSE
setdemorandstream(491218381);
trainFcn = 'trainlm'; % Levenberg-Marquardt backpropagation.
inputDelays = 1:2;
feedbackDelays = 1;
hiddenLayerSize = [10 20];
net_NARX = narxnet(inputDelays,feedbackDelays,hiddenLayerSize,'open',trainFcn);
net_NARX.divideFcn = 'dividerand';
net_NARX.divideMode = 'time'
net_NARX.divideParam.trainRatio = 0.7
net_NARX.divideParam.valRatio = 0.15
net_NARX.divideParam.testRatio = 0.15
net_NARX.layers{2}.transferFcn = 'radbas';
net_NARX.performFcn = 'mse';
% Train the Network
[net_NARX,tr] = train(net_NARX,x,t,xi,ai);
So in conclusion, the best NRMSE result is 65% from Sigmoidnet, it's R^2 is 0.88 and RMSE is 72.87. The timeseries NARX Neural network, using narxnet function performs miserably
due to the fixed inputs orders. But other neural network models aren't perform better either. As well as Hammerstein-Wiener model although it contains sigmoid functions.
So here are my questions:
1. Do you have any suggestions on how I can improve the overall prediction accuracy of the dynamic models?
2. Why NARX neural network and Hammerstein-Wiener model perform so badly?
3. Do I need more data to train?
4. How I can find accurate estimated model order, espically for nonlinear regressors?
5. And do I have an option to deploy the matlab script into Simulink? As I realized that there were not much degree of freedom to configure the different inputs order using the
system identification tool box and other neural network tool boxes.
Thank you for reading so patiently and I am looking forward to your kindly suggestions and helps :)
 0 Comments
Comment on this question...
Answer this question
 Answers (0)
Answer this question
Normal
TEXT
CODE
INSERT
RUN
HELP
Follow activity on this question (change notification settings)
Cancel
Submit
See Also
MATLAB Answers
How to divide the data using "divideblock" for training and testing , excluding validation dataset in NAR network for time serie...
1 Answer
whats this code all about?
1 Answer
How can I use neural network for multi step ahead prediction
1 Answer
Entire Website
Artificial Neural Network Training on MATLAB
File Exchange
Deepnet
File Exchange
Create Reference Model Controller with MATLAB Script
Documentation
Categories
Control Systems ❯ System Identification Toolbox ❯ Nonlinear Model Identification ❯ Nonlinear ARX Models
Tags
narx
neural networks
Products
MATLAB
Release
R2019b

Remember to follow the Community Guidelines
Poll
What is your favorite type of Cody Problem Group?
A bunch of quick, simple problems
A structured, educational set
Brain-teasers
Random miscellany
Something else
What are Problem Groups?
767 votes 2 comments 297 views
Vote
mathworks.com
© 1994-2021 The MathWorks, Inc. MATLAB and Simulink are registered trademarks of The MathWorks, Inc. See mathworks.com/trademarks for a list of additional trademarks. Other product or brand names may be trademarks or registered trademarks of their respective holders.
Download