⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gauss.m

📁 The pattern recognition matlab toolbox
💻 M
字号:
%GAUSS Generation of a multivariate Gaussian dataset% % 	A = GAUSS(N,U,G,LABTYPE)%% INPUT%	  N		     Array of number of objects to generate for each class%	  U		     Dataset with means, labels and priors of classes (default: %              zeros(C,K), where C is the length of array N and K = 1)%	  G		     Covariance matrix for each class (default: eye(K))%	  LABTYPE	 Label type (default: 'crisp')%% OUTPUT%	  A		     Dataset containing multivariate Gaussian data%% DESCRIPTION% Generation of N K-dimensional Gaussian distributed samples for C classes.% The covariance matrices should be specified in G (size K*K*C) and the% means, labels and prior probabilities can be defined by the dataset U with% size (C*K). If U is not a dataset, it should be a C*K matrix and A will% be a dataset with C classes.%% If N is a vector, exactly N(I) objects are generated for class I, I = 1..C.% % EXAMPLES% 1. Generation of 50 points for each of two 1-dimensional distributions with%    mean -1 and 1 and with variances 1 and 2:%%	     GAUSS([50 50],[-1;1],CAT(3,1,2))%%   Note that the two 1-dimensional class means should be given as a column%   vector [1;-1], as [1 -1] defines a single 2-dimensional mean. Note that%   the 1-dimensional covariance matrices degenerate to scalar variances,%   but have still to be combined into a collection of square matrices using%   the CAT(3,....) function.%% 2. Generation of 300 points for 3 classes with means [0 0], [0 1] and %    [1 1] and covariance matrices [2 1; 1 4], EYE(2) and EYE(2):%%      GAUSS(300,[0 0; 0 1; 1 1]*3,CAT(3,[2 1; 1 4],EYE(2),EYE(2)))%% SEE ALSO % DATASETS, PRDATASETS% Copyright: R.P.W. Duin, duin@ph.tn.tudelft.nl% Faculty of Applied Sciences, Delft University of Technology% P.O. Box 5046, 2600 GA Delft, The Netherlands% $Id: gauss.m,v 1.2 2006/03/08 22:06:58 duin Exp $function a = gauss(n,u,g,labtype)	prtrace(mfilename);	if (nargin < 1)		prwarning (2,'number of samples not specified, assuming N = 50'); 			n = 50;		end		cn = length(n);	if (nargin < 2)		prwarning (2,'means not specified; assuming one dimension, mean zero');		u = zeros(cn,1); 	end;	if (nargin < 3)		prwarning (2,'covariances not specified, assuming unity');	 	g = eye(size(u,2)); 	end	if (nargin < 4)		prwarning (3,'label type not specified, assuming crisp');		labtype = 'crisp'; 	end	% Return an empty dataset if the number of samples requested is 0.	if (length(n) == 1) & (n == 0)		a = dataset([]); 		return	end	% Find C, desired number of classes based on U and K, the number of 	% dimensions. Make sure U is a dataset containing the means.	if (isa(u,'dataset'))		[m,k,c] = getsize(u);		lablist = getlablist(u);		p = getprior(u);	else		[m,k] = size(u); 				c = m;		lablist = genlab(ones(c,1));		u = dataset(u,lablist);		p = ones(1,c)/c;	end	if (cn ~= c) & (cn ~= 1)		error('The number of classes specified by N and U does not match');	end 	% Generate a class frequency distribution according to the desired priors.	n = genclass(n,p);	% Find CG, the number of classes according to G. 	% Make sure G is not a dataset.	if (isempty(g))		g = eye(k); 		cg = 1;	else		g = +g; [k1,k2,cg] = size(g);		if (k1 ~= k) | (k2 ~= k)			error('The number of dimensions of the means U and covariance matrices G do not match');		end		if (cg ~= m & cg ~= 1)			error('The number of classes specified by the means U and covariance matrices G do not match');		end	end	% Create the data A by rotating and scaling standard normal distributions 	% using the eigenvectors of the specified covariance matrices, and adding	% the means.	a = [];	for i = 1:m		j = min(i,cg);						% Just in case CG = 1 (if G was not specified).		% Sanity check: user can pass non-positive definite G.				[V,D] = eig(g(:,:,j)); V = real(V); D = real(D);			a = [a; randn(n(i),k)*sqrt(D)*V' + repmat(+u(i,:),n(i),1)];	end	% Convert A to dataset by adding labels and priors.	labels = genlab(n,lablist);	a = dataset(a,labels,'lablist',lablist,'prior',p);	% If non-crisp labels are requested, use output of Bayes classifier.	switch (labtype)		case 'crisp'			;		case 'soft'			w = nbayesc(u,g); 					targets = a*w*classc;			a = setlabtype(a,'soft',targets);		otherwise			error(['Label type ' labtype ' not supported'])	end	a = setname(a,'Gaussian Data');return

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -