X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=src%2Ftest%2Fgenerate_test_data%2Fhelpers%2FgenerateIO.m;fp=src%2Ftest%2Fgenerate_test_data%2Fhelpers%2FgenerateIO.m;h=0000000000000000000000000000000000000000;hb=ef67d338c7f28ba041abe40ca9a8ab69f8365a90;hp=c677fd2cf407a14163f8adff459d4700d574f7ab;hpb=c3bc47052f3ccb659659c59a82e9a99ea842398d;p=valse.git diff --git a/src/test/generate_test_data/helpers/generateIO.m b/src/test/generate_test_data/helpers/generateIO.m deleted file mode 100644 index c677fd2..0000000 --- a/src/test/generate_test_data/helpers/generateIO.m +++ /dev/null @@ -1,37 +0,0 @@ -%X is generated following a gaussian mixture \sum pi_r N(meanX_k, covX_r) -%Y is generated then, with Y_i ~ \sum pi_r N(Beta_r.X_i, covY_r) -function[X,Y,Z] = generateIO(meanX, covX, covY, pi, beta, n) - - [p, ~, k] = size(covX); - [m, ~, ~] = size(covY); - if exist('octave_config_info') - %Octave statistics package doesn't have gmdistribution() - X = zeros(n, p); - Z = zeros(n); - cs = cumsum(pi); - for i=1:n - %TODO: vectorize ? http://stackoverflow.com/questions/2977497/weighted-random-numbers-in-matlab - tmpRand01 = rand(); - [~,Z(i)] = min(cs - tmpRand01 >= 0); - X(i,:) = mvnrnd(meanX(Z(i),:), covX(:,:,Z(i)), 1); - end - else - gmDistX = gmdistribution(meanX, covX, pi); - [X, Z] = random(gmDistX, n); - end - - Y = zeros(n, m); - BX = zeros(n,m,k); - for i=1:n - for r=1:k - %compute beta_r . X_i - BXir = zeros(1, m); - for mm=1:m - BXir(mm) = dot(X(i,:), beta(:,mm,r)); - end - %add pi(r) * N(beta_r . X_i, covY) to Y_i - Y(i,:) = Y(i,:) + pi(r) * mvnrnd(BXir, covY(:,:,r), 1); - end - end - -end