?? gmm.m
字號(hào):
function mix = gmm(dim, ncentres, covar_type, ppca_dim)%GMM Creates a Gaussian mixture model with specified architecture.%% Description% MIX = GMM(DIM, NCENTRES, COVARTYPE) takes the dimension of the space% DIM, the number of centres in the mixture model and the type of the% mixture model, and returns a data structure MIX. The mixture model% type defines the covariance structure of each component Gaussian:% 'spherical' = single variance parameter for each component: stored as a vector% 'diag' = diagonal matrix for each component: stored as rows of a matrix% 'full' = full matrix for each component: stored as 3d array% 'ppca' = probabilistic PCA: stored as principal components (in a 3d array% and associated variances and off-subspace noise% MIX = GMM(DIM, NCENTRES, COVARTYPE, PPCA_DIM) also sets the% dimension of the PPCA sub-spaces: the default value is one.%% The priors are initialised to equal values summing to one, and the% covariances are all the identity matrix (or equivalent). The centres% are initialised randomly from a zero mean unit variance Gaussian.% This makes use of the MATLAB function RANDN and so the seed for the% random weight initialisation can be set using RANDN('STATE', S) where% S is the state value.%% The fields in MIX are% % type = 'gmm'% nin = the dimension of the space% ncentres = number of mixture components% covartype = string for type of variance model% priors = mixing coefficients% centres = means of Gaussians: stored as rows of a matrix% covars = covariances of Gaussians% The additional fields for mixtures of PPCA are% U = principal component subspaces% lambda = in-space covariances: stored as rows of a matrix% The off-subspace noise is stored in COVARS.%% See also% GMMPAK, GMMUNPAK, GMMSAMP, GMMINIT, GMMEM, GMACTIV, GMPOST, % GMPROB%% Copyright (c) Ian T Nabney (1996-2001)if ncentres < 1 error('Number of centres must be greater than zero')endmix.type = 'gmm';mix.nin = dim;mix.ncentres = ncentres;vartypes = {'spherical', 'diag', 'full', 'ppca'};if sum(strcmp(covar_type, vartypes)) == 0 error('Undefined covariance type')else mix.covar_type = covar_type;end% Make default dimension of PPCA subspaces one.if strcmp(covar_type, 'ppca') if nargin < 4 ppca_dim = 1; end if ppca_dim > dim error('Dimension of PPCA subspaces must be less than data.') end mix.ppca_dim = ppca_dim;end% Initialise priors to be equal and summing to onemix.priors = ones(1,mix.ncentres) ./ mix.ncentres;% Initialise centresmix.centres = randn(mix.ncentres, mix.nin);% Initialise all the variances to unityswitch mix.covar_typecase 'spherical' mix.covars = ones(1, mix.ncentres); mix.nwts = mix.ncentres + mix.ncentres*mix.nin + mix.ncentres;case 'diag' % Store diagonals of covariance matrices as rows in a matrix mix.covars = ones(mix.ncentres, mix.nin); mix.nwts = mix.ncentres + mix.ncentres*mix.nin + ... mix.ncentres*mix.nin;case 'full' % Store covariance matrices in a row vector of matrices mix.covars = repmat(eye(mix.nin), [1 1 mix.ncentres]); mix.nwts = mix.ncentres + mix.ncentres*mix.nin + ... mix.ncentres*mix.nin*mix.nin;case 'ppca' % This is the off-subspace noise: make it smaller than % lambdas mix.covars = 0.1*ones(1, mix.ncentres); % Also set aside storage for principal components and % associated variances init_space = eye(mix.nin); init_space = init_space(:, 1:mix.ppca_dim); init_space(mix.ppca_dim+1:mix.nin, :) = ... ones(mix.nin - mix.ppca_dim, mix.ppca_dim); mix.U = repmat(init_space , [1 1 mix.ncentres]); mix.lambda = ones(mix.ncentres, mix.ppca_dim); % Take account of additional parameters mix.nwts = mix.ncentres + mix.ncentres*mix.nin + ... mix.ncentres + mix.ncentres*mix.ppca_dim + ... mix.ncentres*mix.nin*mix.ppca_dim;otherwise error(['Unknown covariance type ', mix.covar_type]); end
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -