Why using fitnet is not giving 0.005 error with ENGINE Data set?

I am running the nftool in order to train a neural net using the example data "ENGINE" data set, I am using the same approach used here: mathworks.com/help/nnet/ug/choose-a-multilayer-neural-network-training-function.html#bss4gz0-26 for this data set, but I can not get an MSE less than 300 (and 0.005 is expected). I am using "trainlm" function, I am using a 2-30-2 architecture with "tansig" transfer function, I even tried with 2-50-2, but I can't get a good MSE (I have retrained maaany times). I assume that in the web page they used a simple "fitnet" with the conditions given. Is there something else needed to solve this specific example with an error equal or less to 0.005? I am using MATLAB R2012a.
If you can provide the script with the problem solved I would really appreciate it. Please help!
Thank you

 Accepted Answer

I generally consider a design successful if it can account for 99% of the mean target variance. The corresponding R^2 (Google Wikipedia R-squared) and normalized mean-square-error, NMSE = 1-R^2 are 0.99 and 0.01, respectively. NMSE = MSE/MSE00 where MSE00 = mean(var(t',1)) is the MSE of the naive constant output model that, regardless of input, yields the output y00 = repmat(mean(t,2),1,N). A goal of NMSE <= 0.005 = 5e-3 is reasonable. Given the target scale calculated below, a goal of MSE <= 5e-3 is DEFINITELY not.
close all, clear all, clc
[ x, t ] = engine_dataset;
[I N ] = size(x) % [ 2 1199 ]
[O N ] = size(t) % [ 2 1199 ]
minmaxx = minmax(x)
minmaxt = minmax(t)
% minmaxx = 1e3 *[ 0.0006 0.3140
% 0.5762 1.8018 ]
% minmaxt = 1e3 *[ -0.1767 1.7843
% 0 1.7740 ]
MSE00 = mean(var(t',1)) % 1e5*2.5894
net = fitnet; % default H=10
rng(0)
[net tr y e ] = train(net,x,t);
MSE = mse(e) % 1960.2
NMSE = MSE/MSE00 % 7.6e-3
Which, is smaller than my choice of 1e-2 but larger than 5e-3. The latter goal probably can be achieved with another state of the RNG; if not, one could resort to increasing H.
With the default 0.7/0/15/0/15 data division, the number of training examples and corresponding training equations are
Ntrn = N-2*round(0.15*N) % 839
Ntrneq = Ntrn*O % 1678
With a I-H-O node topology, the number of unknown weights is
Nw = (I+1)*H+(H+1)*O
Minimum MSE solutions tend to be very robust w.r.t. noise, interference and measurement error, when Ntrneq >> Nw or equivalently H << Hub where
Hub = -1+ceil( Ntrneq - O) / ( I + O 1)) % 335
Therefore, given the amount of data, a robust solution with H=30 is a reasonable goal. However, MSE <= 5e-3 is not.
Hope this helps
Thank you for formally accepting my answer
Greg

4 Comments

Thank you very much Greg, that is somehow what I thought.
But I am wondering about something else: if you go this link:
And go to the ENGINE part, you'll see the plot of the mean squared error vs time, and you'll see that it goes to 5e-3; so how did they achieve that then? my first thought is that they normalized the target matrix somehow, am I correct?
Or they just graphed the NMSE instead of the MSE?
The
MSE = mse(e) % 1960.2
NMSE = MSE/MSE00 % 7.6e-3
only works in case the number of Inputs = Number of Outputs otherwise , there will be a problem in size of the matrices
Both MSE00 and MSE are scalars

Sign in to comment.

More Answers (1)

I don't have the slightest idea. It looks like the result of normalization. Contact MATLAB and find out who did it.

Categories

Find more on Deep Learning Toolbox in Help Center and File Exchange

Asked:

on 29 Apr 2014

Commented:

on 13 Mar 2015

Community Treasure Hunt

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

Start Hunting!