Neural network predicting impossible values

4 views (last 30 days)
Hi.
I have created a NARX neural network that attempts to predict 96 values per day (daily values with a 15 minute-time resolution) -> The training target is a 1096x96 matrix (3 years) and the testing target is a 365x96 matrix (1 year).
I have normalized the data to [-1, 1] using mapminmax.apply(y,settings). settings was defined using the minimum and maximum possible raw values [0, 1500].
After training and optimizing so far, the network predicts normalized values below -1 and above 1, which it shouldn't.
Is there a way I can set boundaries for the output values? So far, I have had to interpolate the affected values, which is tedious and can mess up the results.
Thanks for any help!
- Marc
  6 Comments
Greg Heath
Greg Heath on 26 Feb 2015
It doesn't make sense to postulate the length of the forecast window when you haven't identified the significant delays of the output autocorrelation function and the input-output crosscorrelation functions.
In order to do this as well as identify and modify outliers, normalize by zscore and don't unnormalize until the very end of the program.
The default normalization/unnormalization for the net is mapminmax. If having 2 normalizations bothers you, you can remove it. However, it is easier to just keep it.
Contrary to what you have described, use a constant length forecast window of an hour so that
[ 4 N-4 ] = size(target)
and, depending on the longest significant crosscorrelation delay
[ I N-4 ] = size(input)
It may be helpful to first design a TIMEDELAYNET and a NARNET before designing the NARXNET.
It may also be helpful to practice on one or more of the MATLAB practice data sets
help nndatasets
doc nndatasets.
Marc Jakobi
Marc Jakobi on 26 Feb 2015
The reasons I chose mapminmax over zscore for nomalization are because the inputs have extremely different variations (air pressure varies far less than the time stamp values, for example). Mapping each input to [-1, 1] should prevent important inputs from being "neglected". Also, since one weather station could have completely different irradiance values than the training/testing data set, I have to choose reference values for normalization (for example, the solar constant) so that I can easily undo the normalization. mapminmax seems to be the best solution so far, since reversing the normalization is less complicated and error-prone than other methods (please correct me if I am wrong). I only unnormalize the solar irradiance after the end of the program.
I am not quite sure what you mean by "use a constant length forecast window of an hour".
The results are generally acceptable. I have changed the number of delays to 96 (four days) and the adaption works quite well (it generates a forecast ahead for 24 time steps (1 day)) and then updates it every hour, forecasting ahead for an hour less every hour into the day until it "resets" the next day, forecasting 24 hours ahead again. I do not need a forecast for the next day at say, 12 PM on a specific date. All I need is a forecast for the remaining day. That's why I shorten the forecast length every hour into the day.
And for some reason, with 96 delays, there are still some values below -1, but far less than before (only at night, which is easy to correct) and not very far below anymore.
So my problem is not so drastic that I would have to rewrite the entire code. I was just wondering if there was something I could do to "let the network know" the minimum and maximum values it should output.

Sign in to comment.

Accepted Answer

Greg Heath
Greg Heath on 13 Jun 2015
If you must have normalized outputs in the range [-1,1],
Replace the default output transfer function of PURELIN with TANSIG.
Thank you for formally accepting my answer
Greg
  1 Comment
Greg Heath
Greg Heath on 13 Jun 2015
I recommend using zscore, minmax and plots BEFORE TRAINING to verify that both inputs and targets have reasonable summary statistics. If not, you can delete or modify outliers.
Then, you have the choice of using the already available zx and/or zt for training WITH OR WITHOUT the normalization in train.

Sign in to comment.

More Answers (0)

Categories

Find more on Deep Learning Toolbox 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!