Mercurial > hg > camir-aes2014
diff toolboxes/FullBNT-1.0.7/netlab3.3/demhmc1.m @ 0:e9a9cd732c1e tip
first hg version after svn
author | wolffd |
---|---|
date | Tue, 10 Feb 2015 15:05:51 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/toolboxes/FullBNT-1.0.7/netlab3.3/demhmc1.m Tue Feb 10 15:05:51 2015 +0000 @@ -0,0 +1,145 @@ +%DEMHMC1 Demonstrate Hybrid Monte Carlo sampling on mixture of two Gaussians. +% +% Description +% The problem consists of generating data from a mixture of two +% Gaussians in two dimensions using a hybrid Monte Carlo algorithm with +% persistence. A mixture model is then fitted to the sample to compare +% it with the true underlying generator. +% +% See also +% DEMHMC3, HMC, DEMPOT, DEMGPOT +% + +% Copyright (c) Ian T Nabney (1996-2001) + + +dim = 2; % Data dimension +ncentres = 2; % Number of centres in mixture model + +seed = 42; % Seed for random weight initialization. +randn('state', seed); +rand('state', seed); + +clc +disp('This demonstration illustrates the use of the hybrid Monte Carlo') +disp('algorithm to sample from a mixture of two Gaussians.') +disp('The means of the two components are [0 0] and [2 2].') +disp(' ') +disp('First we set up the parameters of the mixture model we are sampling') +disp('from.') +disp(' ') +disp('Press any key to continue.') +pause + +% Set up mixture model to sample from +mix = gmm(dim, ncentres, 'spherical'); +mix.centres(1, :) = [0 0]; +mix.centres(2, :) = [2 2]; +x = [0 1]; % Start vector + +% Set up vector of options for hybrid Monte Carlo. + +nsamples = 160; % Number of retained samples. + +options = foptions; % Default options vector. +options(1) = 1; % Switch on diagnostics. +options(5) = 1; % Use persistence +options(7) = 50; % Number of steps in trajectory. +options(14) = nsamples; % Number of Monte Carlo samples returned. +options(15) = 30; % Number of samples omitted at start of chain. +options(18) = 0.02; + +clc +disp(['Next we take ', num2str(nsamples),' samples from the distribution.'... + , 'The first ', num2str(options(15))]) +disp('samples at the start of the chain are omitted. As persistence') +disp('is used, the momentum has a small random component added at each step.') +disp([num2str(options(7)), ... + ' iterations are used at each step and the step size is ',... + num2str(options(18))]) +disp('Sampling starts at the point [0 1].') +disp('The new state is accepted if the threshold value is greater than') +disp('a random number between 0 and 1.') +disp(' ') +disp('Negative step numbers indicate samples discarded from the start of the') +disp('chain.') +disp(' ') +disp('Press any key to continue.') +pause + +[samples, energies] = hmc('dempot', x, options, 'demgpot', mix); + +disp(' ') +disp('Press any key to continue.') +pause +clc +disp('The plot shows the samples generated by the HMC function.') +disp('The different colours are used to show how the samples move from') +disp('one component to the other over time.') +disp(' ') +disp('Press any key to continue.') +pause +probs = exp(-energies); +fh1 = figure; +% Plot data in 4 groups +ngroups = 4; +g1end = floor(nsamples/ngroups); +g2end = floor(2*nsamples/ngroups); +g3end = floor(3*nsamples/ngroups); +p1 = plot(samples(1:g1end,1), samples(1:g1end,2), 'k.', 'MarkerSize', 12); +hold on +lstrings = char(['Samples 1-' int2str(g1end)], ... + ['Samples ' int2str(g1end+1) '-' int2str(g2end)], ... + ['Samples ' int2str(g2end+1) '-' int2str(g3end)], ... + ['Samples ' int2str(g3end+1) '-' int2str(nsamples)]); +p2 = plot(samples(g1end+1:g2end,1), samples(g1end+1:g2end,2), ... + 'r.', 'MarkerSize', 12); +p3 = plot(samples(g2end+1:g3end,1), samples(g2end+1:g3end,2), ... + 'g.', 'MarkerSize', 12); +p4 = plot(samples(g3end+1:nsamples,1), samples(g3end+1:nsamples,2), ... + 'b.', 'MarkerSize', 12); +legend([p1 p2 p3 p4], lstrings, 2); + +clc +disp('We now fit a Gaussian mixture model to the sampled data.') +disp('The model has spherical covariance structure and the correct') +disp('number of components.') +disp(' ') +disp('Press any key to continue.') +pause +% Fit a mixture model to the sample +newmix = gmm(dim, ncentres, 'spherical'); +options = foptions; +options(1) = -1; % Switch off all diagnostics +options(14) = 5; % Just use 5 iterations of k-means in initialisation +% Initialise the model parameters from the samples +newmix = gmminit(newmix, samples, options); + +% Set up vector of options for EM trainer +options = zeros(1, 18); +options(1) = 1; % Prints out error values. +options(14) = 15; % Max. Number of iterations. + +disp('We now train the model using the EM algorithm for 15 iterations') +disp(' ') +disp('Press any key to continue') +pause +[newmix, options, errlog] = gmmem(newmix, samples, options); + +% Print out model +disp(' ') +disp('The trained model has parameters ') +disp(' Priors Centres Variances') +disp([newmix.priors' newmix.centres newmix.covars']) +disp('Note the close correspondence between these parameters and those') +disp('of the distribution used to generate the data') +disp(' ') +disp(' Priors Centres Variances') +disp([mix.priors' mix.centres mix.covars']) +disp(' ') +disp('Press any key to exit') +pause + +close(fh1); +clear all; +