wolffd@0: function [partBinTrn, partBinTst, partBinNoTrn] = sim_from_comparison_UNfair_components(comparison, comparison_ids, k, trainpart, filename) wolffd@0: % wolffd@0: % FOR ISMIR 2012 wolffd@0: % wolffd@0: % creates a cross-validation partitioning of the wolffd@0: % similarity data in "multiG", NOT PRESERVING the wolffd@0: % connected components in it during partitioning wolffd@0: wolffd@0: % --- wolffd@0: % get the similarity multigraph and remove cycles wolffd@0: % --- wolffd@0: cprint(2, 'creating graph') wolffd@0: % Gm = ClipSimGraphMulti(comparison, comparison_ids); wolffd@0: % Gm.remove_cycles_length2; wolffd@0: cprint(2, 'loading Multigraph for Similarity Constraints') wolffd@0: load('comp_SimGraphMulti.mat', 'G'); wolffd@0: wolffd@0: wolffd@0: % get similarity data wolffd@0: [weights, a, b, c] = G.similarities(); wolffd@0: wolffd@0: % --- wolffd@0: % We randomise the constraint succession wolffd@0: % --- wolffd@0: datPermu = randperm(numel(a)); wolffd@0: a = a(datPermu); wolffd@0: b = b(datPermu); wolffd@0: c = c(datPermu); wolffd@0: weights = weights(datPermu); wolffd@0: wolffd@0: % --- wolffd@0: % NOTE: we try the easy route: partition the graphs wolffd@0: % and look at which constraints balance we end up with wolffd@0: % --- wolffd@0: P = cvpartition(numel(a), 'k', k); wolffd@0: wolffd@0: % --- wolffd@0: % here we export similarity test sets wolffd@0: % --- wolffd@0: cprint(2, 'export test similarity') wolffd@0: partBinTst = {}; wolffd@0: for i = 1:P.NumTestSets % test runs wolffd@0: wolffd@0: partBinTst{i} = [a(P.test(i))' b(P.test(i))' c(P.test(i))' weights(P.test(i))]; wolffd@0: end wolffd@0: wolffd@0: wolffd@0: % --- wolffd@0: % Note: This uses a "truly" increasing training set wolffd@0: % to do the partial training partition wolffd@0: % --- wolffd@0: cprint(2, 'export train similarity') wolffd@0: for m = 1:numel(trainpart) wolffd@0: wolffd@0: % save test indices wolffd@0: Ptrain(m) = cvpartition_trunctrain_incsubsets(P, trainpart(m)); wolffd@0: end wolffd@0: wolffd@0: % --- wolffd@0: % here we export similarity training sets wolffd@0: % --- wolffd@0: partBinTrn = {}; wolffd@0: for i = 1:P.NumTestSets % train runs wolffd@0: wolffd@0: for m = 1:numel(trainpart) % increasing training sets wolffd@0: wolffd@0: % get training indices wolffd@0: idxB = Ptrain(m).training(i); wolffd@0: wolffd@0: % save into cell wolffd@0: partBinTrn{i,m} = [a(idxB)' b(idxB)' c(idxB)' weights(idxB)]; wolffd@0: end wolffd@0: end wolffd@0: wolffd@0: partBinNoTrn = {}; wolffd@0: for i = 1:P.NumTestSets % train runs wolffd@0: wolffd@0: for m = 1:numel(trainpart) % increasing training sets wolffd@0: wolffd@0: % get training indices wolffd@0: idxB = ~Ptrain(m).training(i) & ~Ptrain(m).test(i); wolffd@0: wolffd@0: % save into cell wolffd@0: partBinNoTrn{i,m} = [a(idxB)' b(idxB)' c(idxB)' weights(idxB)]; wolffd@0: end wolffd@0: end wolffd@0: wolffd@0: if nargin == 5 wolffd@0: save(filename, 'partBinTrn', 'partBinTst', 'partBinNoTrn') wolffd@0: end wolffd@0: end