Home > gmmbayestb-v1.0 > gmmbvl_mixgen.m

gmmbvl_mixgen

PURPOSE ^

gmmbvl_mixgen - Gaussian mixture generator

SYNOPSIS ^

function [X,T,L1,L2] = gmmbvl_mixgen(n,m,k,d,c,e)

DESCRIPTION ^

gmmbvl_mixgen - Gaussian mixture generator 

[X,T] = gmmbvl_mixgen(n,m,k,d,c,e) 
  n - size of training set 
  m - size of test set 
  k - number of components
  d - dimension
  c - separation degree
  e - maximum eccentricity
returns
  X - training set (n x d)
  T - test set (m x d)

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function [X,T,L1,L2] = gmmbvl_mixgen(n,m,k,d,c,e)
0002 %gmmbvl_mixgen - Gaussian mixture generator
0003 %
0004 %[X,T] = gmmbvl_mixgen(n,m,k,d,c,e)
0005 %  n - size of training set
0006 %  m - size of test set
0007 %  k - number of components
0008 %  d - dimension
0009 %  c - separation degree
0010 %  e - maximum eccentricity
0011 %returns
0012 %  X - training set (n x d)
0013 %  T - test set (m x d)
0014 
0015 % Nikos Vlassis, 2000
0016 % for definitions see (Dasgupta, 1999)
0017 
0018 %
0019 % $Name:  $
0020 
0021 R=zeros(k,d^2);
0022 
0023 % mixing weights
0024 while 1
0025   W = rand(k,1); 
0026   W = W / sum(W);
0027   if all(W > 1/(4*k)) 
0028     break;
0029   end
0030 end
0031 
0032 % create c-separated Gaussian clusters of maximum eccentricity e
0033 trials = 1;
0034 while 1
0035   X = [];
0036   T = [];
0037   M = randn(k,d)*sqrt(k)*sqrt(c)*trials/10;
0038   Trace = zeros(k,1);
0039   for j = 1:k
0040     U = rand(d,d)-0.5; 
0041     U = sqrtm(inv(U*U')) * U;
0042     L = diag(rand(d,1)*(e-1)+1).^2/100;
0043     msg = 1;
0044     while msg
0045       [C,msg] = chol(U*L*U');
0046     end
0047     R(j,:)=C(:)';
0048 
0049     nj = ceil(n*W(j));
0050     Xj = randn(nj,d) * C;
0051     X = [X; repmat(M(j,:),nj,1) + Xj];
0052     Trace(j) = trace(cov(Xj));
0053 
0054     mj = ceil(m*W(j));
0055     Tj = randn(mj,d) * C;
0056     T = [T; repmat(M(j,:),mj,1) + Tj];
0057 
0058   end
0059   % check degree of separation
0060   error = 0;
0061   for i = 1:k-1
0062     for j = i+1:k
0063       if norm(M(i,:)-M(j,:)) < c * sqrt(max(Trace(i),Trace(j)))
0064         error = 1;
0065       end
0066     end
0067   end
0068   if ~error
0069     break;
0070   end
0071   trials = trials + 1;
0072 end
0073 
0074 L = gmmbvl_em_gauss(X,M,R);
0075 F = L*W; 
0076 F(find(F < eps)) = eps;
0077 L1 = mean(log(F)); 
0078 if ~isempty(T) 
0079   L = gmmbvl_em_gauss(T,M,R);
0080   F = L*W; 
0081   F(find(F < eps)) = eps;
0082   L2 = mean(log(F));
0083 end

Generated on Thu 14-Apr-2005 13:50:22 by m2html © 2003