how can divide the sample into two part (training and test) in Narnet

4 views (last 30 days)
coqui
coqui on 16 May 2015
Edited: Greg Heath on 10 Jul 2015
By using Matlab code the divide function which I have employed is divideblock therefore I necessarily divided the sample into three part : training, validation and test.
How I can decomposed the sample inti only two parts (training and test), what's the code which I must employed instead 'divideblock'.
Thanks

Accepted Answer

Greg Heath
Greg Heath on 10 Jul 2015
close all, clear all, clc, tic
% help narnet
T = simplenar_dataset;
sizeT = size(T) % [ 1 100 ]
t = cell2mat(T);
[ O N ] = size(t) % [ 1 100 ]
minmaxt = minmax(t) % [ 0.16218 0.99991]
MSE00 = var(t',1) % 0.063306
MSE00a = var(t',0) % 0.063945
plot(t)
FD = 1:2, H = 10 % nonoptimal default
neto = narnet( FD , H ) % No semicolon
% divideFcn: 'dividerand'
% divideParam: .trainRatio, .valRatio, .testRatio
% divideMode: 'time'
neto.divideParam.valRatio = 0;
% The new defaults will be
newtestratio = 0.15 + ( 0.15/(0.7+0.15))*0.15 % 0.17647
newtrainratio = 0.70 + ( 0.70/(0.7+0.15))*0.15 % 0.82353
No = N - max(FD) % 98
Ntsto = round(newtestratio*No) % 17
Ntrno = No - Ntsto % 81
[ Xo, Xoi, Aoi, To ] = preparets( neto, {}, {}, T );
[ Oo No ] = size(To) % [ 1 98 ]
[ neto tro Yo Eo Xof Aof ] = train( neto, Xo, To, Xoi, Aoi );
tro = tro % No semicolon
% trainInd: [1x81 double]
% valInd: [1x0 double]
% testInd: [1x17 double]
% num_epochs: 313
% vperf: [1x314 double] NaN(1,314)
% val_fail: [1x314 double] zeros(1,314)
% best_perf: 4.3277e-10
% best_vperf: NaN
% best_tperf: 2.0093e-09
  1 Comment
Greg Heath
Greg Heath on 10 Jul 2015
WHOOPS!
Did you want strictly 80/20 instead of the default 0.82353/0.17647?
I'll try assigning them and see what happens.
neto.divideParam.valRatio = 0;
neto.divideParam.trainRatio = 80;
neto.divideParam.testRatio = 20;
I get
delay/train/val/test = 2/78/0/20
Agreeing with
Ntst = round(0.20*98) = 20
Ntrn = 98-20 = 78

Sign in to comment.

More Answers (1)

the cyclist
the cyclist on 16 May 2015
Notice the syntax of divideblock:
divideblock(Q,trainRatio,valRatio,testRatio)
If you only want training and test sets, then use something like
divideblock(Q,0.8,0,0.2)
  3 Comments
coqui
coqui on 5 Jul 2015
Hi Greg,
I have data running from 2009 to 2013. I want decompose the data into training data (2009-2012) and only 2013 for test, how I can put the code.
The model is narnet (matlab2013) trained with levenberg marquardt.
By using divideblock we must divide into three groups but I need only train and test.
how I can do it?

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!

Translated by