%LABELD Fixed mapping finding labels of classification dataset % (perform crisp classification) % % LABELS = LABELD(A,W) % LABELS = A*W*LABELD % LABELS = LABELD(A*W,THRESH) % LABELS = A*W*LABELD(THRESH) % LABELS = LABELD(A,W,THRESH) % % INPUT % A Dataset % W Trained classifier % THRESH Rejection threshold % % OUTPUT % LABELS List of labels % % DESCRIPTION % Returns the labels of the classification dataset Z=A*W. For each object % in Z (i.e. each row) the feature label or class label (i.e. the column % label) of the maximum column value is returned. % % Effectively, this performs the classification. It can also be considered % as a conversion from soft labels (posteriors) stored in Z to crisp labels. % % When the parameter THRESH is supplied, then all objects which % classifier output falls below this value are rejected. The returned % label is then NaN or a string with spaces (depending if the labels are % numeric or string). Because the output of the classifier is used, it % is recommended to convert the output to a posterior prob. output using % CLASSC. (David Tax, 27-12-2004) % % SEE ALSO (PRTools Guide) % MAPPINGS, DATASETS, TESTC, PLOTC % Copyright: R.P.W. Duin, r.p.w.duin@37steps.com % Faculty EWI, Delft University of Technology % P.O. Box 5031, 2600 GA Delft, The Netherlands function labels = labeld(varargin) argin = shiftargin(varargin,'scalar'); if numel(argin) > 1 argin = [argin(1) shiftargin(argin(2:end),'scalar')]; end argin = setdefaults(argin,[],[],[]); [a,w,thresh] = deal(argin{:}); if (nargin == 0) | isempty(a) % Untrained mapping. labels = prmapping(mfilename,'fixed',{thresh}); elseif isempty(w) if (isdatafile(a)) % datafile needs to process objects separately labels = cell(size(a,1),1); next = 1; while next > 0 [b,next,J] = readdatafile(a,next); labs = feval(mfilename,b,[],thresh); for i=1:length(J) labels{J(i)} = labs(i,:); end end if isstr(labels{1}) labels = char(labels); else labels = cell2mat(labels); end return end % In a classified dataset, the feature labels contain the output % of the classifier. [m,k] = size(a); featlist = getfeatlab(a); Jrej = []; % as a start, we don't reject objects if (k == 1) % If there is one output, assume it's a 2-class discriminant: % decision boundary = 0. J = 2 - (double(a) >= 0); if ~isempty(thresh) warning('Improper thresholding of the 2-class dataset, please use classc.'); end else % Otherwise, pick the column containing the maximum output. [dummy,J] = max(+a,[],2); % Reject the objects which have posteriors lower than the % threshold if ~isempty(thresh) Jrej = find(dummy