Mercurial > hg > camir-aes2014
diff toolboxes/FullBNT-1.0.7/netlab3.3/mdnprob.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/mdnprob.m Tue Feb 10 15:05:51 2015 +0000 @@ -0,0 +1,52 @@ +function [prob,a] = mdnprob(mixparams, t) +%MDNPROB Computes the data probability likelihood for an MDN mixture structure. +% +% Description +% PROB = MDNPROB(MIXPARAMS, T) computes the probability P(T) of each +% data vector in T under the Gaussian mixture model represented by the +% corresponding entries in MIXPARAMS. Each row of T represents a single +% vector. +% +% [PROB, A] = MDNPROB(MIXPARAMS, T) also computes the activations A +% (i.e. the probability P(T|J) of the data conditioned on each +% component density) for a Gaussian mixture model. +% +% See also +% MDNERR, MDNPOST +% + +% Copyright (c) Ian T Nabney (1996-2001) +% David J Evans (1998) + +% Check arguments for consistency +errstring = consist(mixparams, 'mdnmixes'); +if ~isempty(errstring) + error(errstring); +end + +ntarget = size(t, 1); +if ntarget ~= size(mixparams.centres, 1) + error('Number of targets does not match number of mixtures') +end +if size(t, 2) ~= mixparams.dim_target + error('Target dimension does not match mixture dimension') +end + +dim_target = mixparams.dim_target; +ntarget = size(t, 1); + +% Calculate squared norm matrix, of dimension (ndata, ncentres) +% vector (ntarget * ncentres) +dist2 = mdndist2(mixparams, t); + +% Calculate variance factors +variance = 2.*mixparams.covars; + +% Compute the normalisation term +normal = ((2.*pi).*mixparams.covars).^(dim_target./2); + +% Now compute the activations +a = exp(-(dist2./variance))./normal; + +% Accumulate negative log likelihood of targets +prob = mixparams.mixcoeffs.*a;