Daniel@0: % --- Daniel@0: % class cvpartition_trunctrain Daniel@0: % NOTE: this is a fake cvpartition double for Daniel@0: % using cvpartitions in truncated-training size experiments Daniel@0: % --- Daniel@0: classdef cvpartition_trunctrain Daniel@0: Daniel@0: properties (Hidden) Daniel@0: Daniel@0: mtest; Daniel@0: mtraining; Daniel@0: end Daniel@0: properties Daniel@0: N; Daniel@0: NumTestSets; Daniel@0: TrainSize; Daniel@0: TestSize; Daniel@0: end Daniel@0: Daniel@0: Daniel@0: methods Daniel@0: Daniel@0: % --- Daniel@0: % constuctor: directly calculates the truncated testset Daniel@0: % --- Daniel@0: function P = cvpartition_trunctrain(Pin, perctrain) Daniel@0: Daniel@0: P.N = Pin.N; Daniel@0: P.NumTestSets = Pin.NumTestSets; Daniel@0: Daniel@0: for i = 1:Pin.NumTestSets Daniel@0: Daniel@0: % copy testing data Daniel@0: P.TestSize(i) = Pin.TestSize(i); Daniel@0: P.mtest{i} = Pin.test(i); Daniel@0: Daniel@0: % calculate new training size Daniel@0: P.TrainSize(i) = ceil(perctrain * Pin.TrainSize(i)); Daniel@0: Daniel@0: % get actual training indices Daniel@0: idx = find(Pin.training(i)); Daniel@0: Daniel@0: % --- Daniel@0: % TODO: save the permutation in a global variable, Daniel@0: % tomake the same smaller set available Daniel@0: % for all further experiments. Daniel@0: % moreover, it would be great if the smaller training sets Daniel@0: % are subsets of the bigger ones Daniel@0: % --- Daniel@0: tokeep = randperm(numel(idx)); Daniel@0: tokeep = tokeep(1:P.TrainSize(i)); Daniel@0: Daniel@0: % get indices to keep Daniel@0: idx = idx(tokeep); Daniel@0: Daniel@0: % build truncated training set Daniel@0: P.mtraining{i} = false(P.N, 1); Daniel@0: P.mtraining{i}(idx) = true; Daniel@0: end Daniel@0: end Daniel@0: Daniel@0: function out = test(P, i) Daniel@0: Daniel@0: out = P.mtest{i}; Daniel@0: end Daniel@0: Daniel@0: function out = training(P, i) Daniel@0: Daniel@0: out = P.mtraining{i}; Daniel@0: end Daniel@0: Daniel@0: end Daniel@0: end