Skip to content
Snippets Groups Projects
Commit f44a8042 authored by ac (fx)'s avatar ac (fx)
Browse files

nist updates, confusion matrix, od curves

parent b2f4deee
Branches
No related tags found
No related merge requests found
...@@ -33,3 +33,4 @@ packages/ ...@@ -33,3 +33,4 @@ packages/
*.asv *.asv
/src/MATLAB/+NWD/+Count/*.mat /src/MATLAB/+NWD/+Count/*.mat
*.m~ *.m~
*.tif
...@@ -3,8 +3,8 @@ function [d,c]=MNISTdistance(Training) ...@@ -3,8 +3,8 @@ function [d,c]=MNISTdistance(Training)
d=zeros(length(Training),length(Training)); d=zeros(length(Training),length(Training));
c=d; c=d;
N=length(Training); N=length(Training);
% parfor i=1:N parfor i=1:N
for i=1:N % for i=1:N
im1={Training(i).im}; im1={Training(i).im};
for j=1:N for j=1:N
if (i==j) if (i==j)
......
% this is where the OD gets computed, eqn ??? from paper
function [dK,deltaK]=deltaK(xDigits,idx) function [dK,deltaK]=deltaK(xDigits,idx)
if ~exist('idx','var') if ~exist('idx','var')
......
function drawResults(kpred,K,mx,sd,outfolder,nTrial)
clf;
errorbar(mx,sd);
drawnow;
titlestr=sprintf('mean and standard deviation of optimality deficiency kTrue=%d kPred=%d',K,kpred);
title(titlestr)
xlabel('K')
if exist('outfolder','var')
if kpred==K
cval='true';
else
cval='false';
end
outsuffix=[cval '/exp_' num2str(nTrial) '_kTrue_' num2str(K) '_kPred_' num2str(kpred) '.tif'];
target=fullfile(outfolder,outsuffix);
print(target,'-dtiffn');
end
4;
function [kOD,dx]=getK(xDigits,kMax,NUMBER_OF_TRIALS) function [kOD,mx,sd]=getK(xDigits,kMax,NUMBER_OF_TRIALS)
dx=[]; dx=[];
idx=[]; idx=[];
...@@ -21,8 +21,8 @@ for k=1:kMax ...@@ -21,8 +21,8 @@ for k=1:kMax
end end
end end
% parfor i=1:NUMBER_OF_TRIALS parfor i=1:NUMBER_OF_TRIALS
for i=1:NUMBER_OF_TRIALS % for i=1:NUMBER_OF_TRIALS
dx(k,i)=deltaK([xDigits(idxTrials{i})],idxKey{i}); dx(k,i)=deltaK([xDigits(idxTrials{i})],idxKey{i});
end end
end end
...@@ -36,16 +36,21 @@ mx=mean(dx,2,'omitnan'); ...@@ -36,16 +36,21 @@ mx=mean(dx,2,'omitnan');
sd=std(dx,0,2,'omitnan'); sd=std(dx,0,2,'omitnan');
% account for simulation error, as in gap statistic % account for simulation error, as in gap statistic
sd=sd.*sqrt(1+1/NUMBER_OF_TRIALS); sd=sd.*sqrt(1+1/NUMBER_OF_TRIALS);
kOD=find(mx(1:end-1)-sd(1:end-1)>mx(2:end),1,'first'); kOD=find(mx(1:end-1)-sd(1:end-1)>mx(2:end),1,'first');
if ~isempty(kOD) if ~isempty(kOD)
kOD=kOD+1; kOD=kOD+1;
% fprintf(1,'sd :: kOD=%d\n',kOD);
else else
if mx(1)+sd(1)<mx(2) deltaMx=diff(mx)';
kOD=1; kOD=find(deltaMx>0,1,'first');
if isempty(kOD)
od=max(deltaMx(deltaMx<0));
kOD=find(deltaMx==od,1,'first');
% fprintf(1,'max(deltaMX<0) :: kOD=%d\n',kOD);
else else
[~,kOD]=min(mx); % fprintf(1,'deltaMX>0 :: kOD=%d\n',kOD);
end end
kOD=kOD*-1;
end end
4; 4;
tic() outfolder='./results/';
if ~exist(outfolder,'dir')
mkdir(outfolder);
mkdir(fullfile(outfolder,'true'));
mkdir(fullfile(outfolder,'false'))
end
tblResults=table(); tblResults=table();
maxDigits=[0,1,2,3,8,9]; maxDigits=[0,1,2,3,8,9];
targetSize=75; targetSize=100;
rgResults=[]; % maxDigit,trial,iteration rgResults=[]; % maxDigit,trial,iteration
kMax=12; kMax=12;
NUMBER_OF_TRIALS=2000; NUMBER_OF_SAMPLES=2000;
NUMBER_OF_TRIALS=100;
p=startParallel(56); p=startParallel(256);
outname=['getK5k' datestr(now,'mm-dd-yyyy') '.mat'] outname=['getK5k' datestr(now,'mm-dd-yyyy') '.mat']
NDIGITS=length(maxDigits); NDIGITS=length(maxDigits);
parfor nTrial=1:5000 confusionMatrix=zeros(10,10);
for nTrial=1:NUMBER_OF_TRIALS
for d=1:NDIGITS for d=1:NDIGITS
target=[0:maxDigits(d)]; target=[0:maxDigits(d)];
K=length(target); K=length(target);
cardinality=ceil(targetSize/length(target)); cardinality=ceil(targetSize/length(target));
xDigits=getNISTdigits(target,cardinality); xDigits=getNISTdigits(target,cardinality);
k=getK(xDigits,kMax,NUMBER_OF_TRIALS); [kpred,mx,sd]=getK(xDigits,kMax,NUMBER_OF_SAMPLES);
rgResults(d,nTrial)=k; rgResults(d,nTrial)=kpred;
confusionMatrix(K,kpred)=confusionMatrix(K,kpred)+1;
drawResults(kpred,K,mx,sd,outfolder,nTrial);
5; 5;
end end
if 0==mod(nTrial,20)
mean(rgResults,2)
confusionMatrix
end
5; 5;
end end
toc() toc()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment