Problematic Ordinal Input Categorical Output Neural Network

3 views (last 30 days)
Hello everyone.! I'm fairly new to the ANN, but I am making quite an effort on that. I have a problem with ordinal input (numbers from 1-5 in each column, arrays are the observations (172) ) and categorical output (A-->10000 , B-->010000, C-->00100 etc) I am using patternet with 100 hidden neurons and
net.layers{1}.transferFcn = 'tansig';
net.layers{2}.transferFcn = 'logsig';
although I have given a shot to softmax and other transfer functions. Also I use
net.divideFcn = 'dividerand';
net.divideParam.trainRatio = 70/100;
net.divideParam.valRatio = 15/100;
net.divideParam.testRatio = 15/100;
net.trainFcn = 'trainscg';
net.trainParam.max_fail= 1000;
net.inputs{1}.processFcns = {'removeconstantrows','fixunknowns','mapminmax'};
net.outputs{2}.processFcns = {'removeconstantrows'};
net.trainParam.epochs=1000;
net.trainParam.min_grad=0;
this block in order to finalize my network. However, I have not achieved any greater accuracy the 52%.. Is there any specific suggestion.? Thank you everyone. I hope I was accurate enough.

Accepted Answer

Greg Heath
Greg Heath on 22 Feb 2016
1. It looks like you can delete the above equations because they are defaults.
2. You definitely need to substantially reduce the No. of hidden nodes
[ I N ] = size(input) % = ?
[ O N ] = size(target)% = ?
Ntrn = N -2*round(0.15*N)% = ?
Ntrneq = Ntrn*O % =? No. of training equations
For an I-H-O net, the number of unknown weights is
Nw = (I+1)H+(H+1)*O
No. of unknowns is not larger than number of equations when
H < Hub = (Ntrneq-O)/(I+O+1)
Using the code at
help patternnet
and/or
doc patternnet
where H = 10 (default)
find out how much of the average target variance the net can model
MSE00 = mean((vartarget',1)); MSE reference
NMSE = mse(target-output)/MSE00 %Normalized MSE
Rsq = 1-NMSE ( > 0.99 is my goal)
Loop over i = 1:Ntrials = 10, Then check the 10 results to see if H can be decreased or should be increased.
For examples, search the NEWSGROUP and ANSWERS using
patternnet greg
Hope this helps
Thank you for formally accepting my answer
Greg

More Answers (1)

Andreas
Andreas on 23 Feb 2016
Edited: Andreas on 23 Feb 2016
Thank you so much, I really appreciate your answer! I guess you mean
MSE00 = mean(var(target',1))
and I choose the setting with the highest Rsq. However, although my targets are formatted through the 1-out of-C philosophy, the outputs I get is not 0 or 1 vector, but there are also values inbetween (such as 0.012, 0.534 etc.) Is that correct? Should I post-process something?

Community Treasure Hunt

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

Start Hunting!