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

📄 fixedcc.m

📁 这是我找到的一个模式识别工具箱
💻 M
字号:
%FIXEDCC Construction of fixed combiners%%   V = FIXEDCC(A,W,TYPE,NAME)%% INPUT%   A      Dataset%   W      A set of classifier mappings%   TYPE   The type of combination rule%   NAME   The name of this combination rule%% OUTPUT%   V      Mapping%% DESCRIPTION% Define a mapping V which applies the combination rule TYPE to the% set of mappings W. The set of mappings W should be a parallel% combination (see MAPPINGS).%% The TYPE of combining can be any of the following:%   average, min, max, mean, median, prod, vote,%% Note that average is only possible for affine 2-class classifiers.%% When W is a set of classifiers and A a dataset (possibly the result% of  B*W, where W is again a set of classifiers) then:%%   V = FIXEDCC(W,[],TYPE)   combines the mappings W with the comb. rule TYPE%   V = FIXEDCC(A,[],TYPE)   computes the combining output for dataset A%   V = FIXEDCC(A,W,TYPE)    computes the combining output for dataset A,%                            where W is trained using A% % EXAMPLES% See prex_combining.%% SEE ALSO% MAPPINGS, MAJORC, MAXC, MEANC, MEDIANC, MINC, PRODC, AVERAGEC% $Id: fixedcc.m,v 1.2 2006/03/08 22:06:58 duin Exp $function v = fixedcc(a,w,type,name)	prtrace(mfilename);	if nargin == 0		% Without input, just return an completely empty combiner mapping (even		% without defining the combination rule):		v = mapping(mfilename,'combiner');		return	end		if isempty(a)		% just return a combiner mapping with just the combining rule				v = mapping(mfilename,'combiner',{[],type,name});			elseif isa(a,'mapping') & isempty(w)				% v = comb_classifier*fixedcc,		% we combine a set of classifiers, not interesting, except for the		% 'average' type, there a new affine transformation is computed:				if isuntrained(a) % store untrained comb_classifier						v = mapping(mfilename,'untrained',{a,type,name});					else              % handle or store trained comb_classifier and all info						[nclass,classlist] = renumlab(getlabels(a));			% Special case is to average affine coefficients for 'average' combining			switch type			 case 'average'			  if ~(isaffine(a) & size(classlist,1) == 2)				  error('Average combining only possible for affine 2-class classifiers')			  end			  n = length(a.data);			  rot = zeros(size(a,1),1);			  off = 0;			  for j=1:length(a.data)				  rot = rot + a.data{j}.data.rot(:,1);				  off = off + a.data{j}.data.offset(1);			  end			  v = affine(rot/n,off/n);						otherwise			  % Standard procedure: make a new trained mapping			  v = mapping(mfilename,'trained',{a,type,name});			end			v = set(v,'size_in',size(a,1),'size_out',size(classlist,1),'labels',classlist);			v = setcost(v,a);		end				elseif isa(a,'dataset') & isempty(w) 				% Call like v = dataset*fixedcc,		% Here the work will be done:		% the dataset has already been mapped through the mappings, and the outputs		% should be processed according to the combiner type.				% get all the relevant parameters:		[m,k] = size(a);		featlist = getfeatlab(a);		[nclass,classlist] = renumlab(featlist);		c = size(classlist,1);		d = zeros(size(a,1),c);		b = +a;  % the classifier outputs to be processed		% for each of the classes the outputs should now be combined to a new		% one, using the combining rule:		for j=1:c						J = find(nclass==j);						switch type							case 'min'			  d(:,j) = min(b(:,J),[],2);			  			case 'max'			  d(:,j) = max(b(:,J),[],2);			  			case 'mean'			  d(:,j) = mean(b(:,J),2);			  			case 'prod'			  d(:,j) = prod(b(:,J),2);			  			case 'median'			  d(:,j) = median(b(:,J),2);			  			case 'vote' % Assumes that classifier outcomes are well ordered in b				% For voting we cannot combine the basic classifier outputs,				% but we should use the classifier labels:				n = size(a,2) / c;				if ~isint(n)					error('All classifiers should refer to all classes')				end				% First get the votes for each of the classes:				[nf,fl] = renumlab(featlist);				mlab = zeros(m,n);				for j=1:n					J = [(j-1)*c+1:j*c];					labels = labeld(a(:,J));					[nl,nlab,ll] = renumlab(fl,labels);					mlab(:,j) = nlab;				end				% Then count the number of votes:				for j=1:c					d(:,j) = (sum(mlab==j,2)+1)/(n+c);				end							case 'average'				error([newline 'Average combiner should directly call the classifiers' ...				newline 'e.g. A*AVERAGEC([W1 W2 W3]), or A*([W1 W2 W3]*AVERAGEC)'])				     			otherwise			  error(['Unknown method for fixed combining: ' type])			end					end				v = setdata(a,d,classlist);			elseif isa(a,'dataset') & isa(w,'mapping')				% call like v = dataset * trained combiner (e.g. a*votec([u v w]))		% This means that we first have to map the data through the mappings, and		% then map this new dataset through the combiner:		if strcmp(getmapping_file(w),mfilename)			% Then we already have a nice combining rule:			% get the relevant parameters:			type = w.data{2};			name = w.data{3};			% Evaluate the mapped data (a*w.data{1}) by this combining rule:			v = feval(mfilename,a*w.data{1},[],type,name);		else			% We will use the parameters given in the argument list			% evaluate the mapped data (a*w) by this combining rule:			v = feval(mfilename,a*w,[],type,name);		end			else                   % this should not happen				error('Call cannot be parsed')			end	if isa(v,'mapping')		v = setname(v,name);	end	return

⌨️ 快捷键说明

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