Daniel@0: function [data, ndata1, ndata2, targets]=gen_data(ndata, seed) Daniel@0: % Generate data from three classes in 2d Daniel@0: % Setting 'seed' for reproducible results Daniel@0: % OUTPUT Daniel@0: % data : data set Daniel@0: % ndata1, ndata2: separator Daniel@0: Daniel@0: if nargin<1, Daniel@0: error('Missing data size'); Daniel@0: end Daniel@0: Daniel@0: input_dim = 2; Daniel@0: num_classes = 3; Daniel@0: Daniel@0: if nargin==2, Daniel@0: % Fix seeds for reproducible results Daniel@0: randn('state', seed); Daniel@0: rand('state', seed); Daniel@0: end Daniel@0: Daniel@0: % Generate mixture of three Gaussians in two dimensional space Daniel@0: data = randn(ndata, input_dim); Daniel@0: targets = zeros(ndata, 3); Daniel@0: Daniel@0: % Priors for the clusters Daniel@0: prior(1) = 0.4; Daniel@0: prior(2) = 0.3; Daniel@0: prior(3) = 0.3; Daniel@0: Daniel@0: % Cluster centres Daniel@0: c = [2.0, 2.0; 0.0, 0.0; 1, -1]; Daniel@0: Daniel@0: ndata1 = round(prior(1)*ndata); Daniel@0: ndata2 = round((prior(1) + prior(2))*ndata); Daniel@0: % Put first cluster at (2, 2) Daniel@0: data(1:ndata1, 1) = data(1:ndata1, 1) * 0.5 + c(1,1); Daniel@0: data(1:ndata1, 2) = data(1:ndata1, 2) * 0.5 + c(1,2); Daniel@0: targets(1:ndata1, 1) = 1; Daniel@0: Daniel@0: % Leave second cluster at (0,0) Daniel@0: data((ndata1 + 1):ndata2, :) = data((ndata1 + 1):ndata2, :); Daniel@0: targets((ndata1+1):ndata2, 2) = 1; Daniel@0: Daniel@0: data((ndata2+1):ndata, 1) = data((ndata2+1):ndata,1) *0.6 + c(3, 1); Daniel@0: data((ndata2+1):ndata, 2) = data((ndata2+1):ndata,2) *0.6 + c(3, 2); Daniel@0: targets((ndata2+1):ndata, 3) = 1; Daniel@0: Daniel@0: if 0 Daniel@0: ndata = 1; Daniel@0: data = x; Daniel@0: targets = [1 0 0]; Daniel@0: end