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