www.pudn.com > ConstrainedEM.zip > purity_accuracy2.m


function [pu , ac]=purity_accuracy2(s,t,nc); 
 
 
freq=zeros(nc,nc); 
 
for i=1:nc 
    inds=find(s==i); 
    ms(i)=length(inds); 
    if isempty(inds) 
        freq(i,:)=0; 
        ms(i)=1;        % to avoid divide by zero in acurracy calculation. 
    else 
        for j=1:nc 
            freq(i,j)=length(find(t(inds)==j)); % freq(i,j) is the number of (s=i,t=j) 
        end 
    end 
    inds=find(t==i); 
    mt(i)=length(inds); 
end 
 
inds=find(mt==0);	% get rid of 0/0 : when mt(i)=0 all freq(i,:)=0 too. 
mt(inds)=1;	 
 
pu=(freq./( mt'*ones(1,nc))')'; 
ac=freq./( ones(nc,1)*ms)'; 
 
mt(inds)=0;		% return 0 to where it was 
 
%pu=mean(max(pu')); 
%ac=mean(max(ac')); 
pu=mt/sum(mt)*max(pu')'; 
ac=ms/sum(ms)*max(ac')';