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

📄 meancov.m

📁 这个为模式识别工具箱
💻 M
字号:
%MEANCOV Estimation of the means and covariances from multiclass data% %   [U,G] = MEANCOV(A,N)% %	INPUT% 	A		Dataset%   N		Normalization to use for calculating covariances: by M, the number%					of samples in A (N = 1) or by M-1 (default, unbiased, N = 0).%% OUTPUT% 	U		Mean vectors% 	G		Covariance matrices%% DESCRIPTION  %	Computation of a set of mean vectors U and a set of covariance matrices G%	of the C classes in the dataset A. The covariance matrices are stored as a%	3-dimensional matrix G of the size K x K x C, the class mean vectors as a%	labeled dataset U of the size C x K.%% The use of soft labels or target labels is supported.% %	SEE ALSO %	DATASETS, GAUSS, NBAYESC, DISTMAHA% 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: meancov.m,v 1.15 2004/12/06 07:37:29 duin Exp $function [U,G] = meancov(a,n)	prtrace(mfilename);	% N determines whether the covariances are normalized by M (N = 1) or by 	% M-1 (unbiased, N = 0), where M is the number of objects.	if (nargin < 2)		prwarning(4,'normalisation not specified, assuming by M-1');		n = 0;	end	if (n ~= 1) & (n ~= 0)		error('Second parameter should be either 0 or 1.')	end	if (~isa(a,'dataset'))			% A is a matrix: compute mean and covariances		U = mean(a);							% 	in the usual way.		G = cov(a,n);	else		[m,k,c] = getsize(a);  	if (islabtype(a,'crisp'))						if (c==0)				U = mean(+a);				G = cov(+a,n);			else				for i = 1:c     					J = findnlab(a,i);					U(i,:) = mean(a(J,:),1);					if (nargout > 1)						G(:,:,i) = covm(a(J,:),n);						end				end			end			labu = getlablist(a);  	elseif (islabtype(a,'soft'))  		problab = gettargets(a);			% Here we also have to be careful for unlabeled data			if (c==0)				prwarning(2,'The dataset has soft labels but no targets defined: using targets 1');				U = mean(+a);				G = cov(+a,n);			else				U = zeros(c,k);				for i = 1:c					% Calculate relative weights for the means.					g = problab(:,i); nn = sum(g); g = g/mean(g); 					U(i,:) = mean(a.*repmat(g,1,k));	% Weighted mean vectors						if (nargout > 1)						u  = mean(a.*repmat(sqrt(g),1,k));						% this appears to be needed to weight cov terms properly						G(:,:,i) = covm(a.*repmat(sqrt(g),1,k),1) - U(i,:)'*U(i,:) + u'*u;						% Re-normalise by M-1 if requested.						if (n == 0)							G(:,:,i) = m*G(:,:,i)/(m-1);						end					end				end			end			labu = getlablist(a);  	else			% Default action.  		U = mean(a);  		G = covm(a,n);			labu = [];  	end		% Add attributes of A to U.		U = dataset(U,labu,'featlab',getfeatlab(a), ...                                'featsize',getfeatsize(a));		if (~islabtype(a,'targets')), U = setprior(U,getprior(a)); end;	end;return

⌨️ 快捷键说明

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