Improving Narxnet Closedloop Performance
4 views (last 30 days)
Show older comments
Hi,
I'm having some trouble developing a Naxrnet for streamflow prediction. I'm using a 1xN matrix of inputs (Rainfall) and a 1xN matrix of outputs (streamflow) where N = 61056. The data is on the 15 minute timestep. I have examined the Input-Output Cross Correlation & Output Autocorrelation via NNCORR (script and results below) and ACF,PACF & CCF plots.
[O,N] = size(x); % [1 36633]
[I,N] = size(t);
zt = zscore(t',1)'; % Standardised Z Scores
zx = zscore(x',1)';
% Average Target Variance etc
MSE00 = mean(var(t',1)); % 617.5553
MSEgoal = 0.005*MSE00; % 3.0878
Ntrn = N-2*round(0.20*N); % 36633
Ntrneq = Ntrn*O; % 36633
L = floor (0.95*(2*Ntrn-1)); % 39834
rng('default')
for i = 1:100
zn=zscore(randn(1,Ntrn),1);
autocorrn = nncorr(zn,zn,Ntrn-1,'biased');
sortabsautocorrn = sort(abs(autocorrn));
thresh95(i) = sortabsautocorrn(L);
end
meanthresh95 = mean(thresh95); % 0.0101
autocorrt = nncorr(zt,zt, Ntrn-1,'biased');
sigflag95 = find(abs(autocorrt(Ntrn+1:2*Ntrn-1))>=meanthresh95);
diffflag = diff(sigflag95);
Temp = find([diffflag inf]>1);
lengths = diff([0 Temp]);
Ends = cumsum(lengths);
crosscorrxt = nncorr(zx,zt, Ntrn-1,'biased');
sigilag95 = -1 + find(abs(crosscorrxt(Ntrn+1:2*Ntrn-1))>=meanthresh95);
diffilag = diff(sigilag95);
Temp1 = find([diffilag inf]>1);
lengths1 = diff([0 Temp1]);
Ends1 = cumsum(lengths1);
Significant Feedback Lags:
1 5688
5751 6790
6865 7594
7672 8639
8782 10347
10371 10921
11047 12965
12988 13010
13048 13553
13588 13642
13806 14050
14190 14232
14289 14342
14400 14463
14488 17685
17867 21147
21231 21253
21405 21492
21616 22158
22293 23568
23708 23718
23775 23794
23883 24095
24166 24222
24440 25285
25358 26412
26597 26646
26687 26810
26882 27160
27256 36633
Significant Input Delays
1 4302
4323 5503
5508 5786
5893 6049
6074 6164
6210 6416
6466 6581
6711 6896
6943 7012
7069 7240
7301 7338
7352 7497
7546 7566
7572 7583
7621 9214
9234 14212
14276 15829
15880 18179
18202 18227
18235 18388
18445 18550
18625 18731
18798 19526
19555 19563
19591 19925
19962 20512
20645 20686
20920 21104
21141 21838
21944 22111
22229 22263
22348 22546
22678 22695
22803 23040
23093 23473
23513 23584
23685 23808
24108 25116
25253 25273
25312 25336
25438 26003
26115 26199
26210 26618
26663 26754
26812 26946
26993 27047
27158 27189
27215 27326
27387 27757
27956 27963
28035 28243
28398 28851
28906 29110
29220 29569
29711 29798
29829 29914
29969 30089
30115 30293
30458 30582
30650 31215
31356 31610
31630 31632
31723 32068
32168 32215
32285 32330
32628 32707
32755 32820
32858 32896
33212 33475
33582 34483
34536 34590
34662 34676
34802 34841
34888 35366
35386 35785
35812 35832
36058 36425
36492 36632
Based on this I have tried a large number of ID & FD combinations as well as varying hidden layer node. In general, I am happy with the open loop training performance (Example NMSE: 9.58e-5/5.72e-5/2.06e-4 train/val/test) but the closeloop performance is generally very poor even when the closeloop is trained. I have attached a graph of the raw data, training model response and closeloop performance (Model = ID: 1:24, FD: 1:2, H: 2)
At the moment, I'm thinking the issue could be non-stationarity in the data, poor model architecture or some other issue and I'd thus be interested in any ideas you all might have re: how to improve the performance, improve closeloop training etc.
Thanks for your time.
Best
0 Comments
Answers (0)
See Also
Categories
Find more on Modeling and Prediction with NARX and Time-Delay Networks in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!