Repository navigation
Expand file tree
/
Copy pathFILTER.m
More file actions
65 lines (60 loc) · 2.19 KB
/
Copy pathFILTER.m
File metadata and controls
65 lines (60 loc) · 2.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
function [subsetIndex,isDissimilar,isVISA] = FILTER(X,Y,Ybin,opts)
[ninst,nalgos] = size(Y);
nfeats = size(X,2);
subsetIndex = false(ninst,1);
isDissimilar = true(ninst,1);
isVISA = false(ninst,1);
gamma = sqrt(nalgos/nfeats)*opts.mindistance;
for ii=1:ninst
if ~subsetIndex(ii)
for jj=ii+1:ninst
if ~subsetIndex(jj)
Dx = pdist2(X(ii,:),X(jj,:));
Dy = pdist2(Y(ii,:),Y(jj,:));
Db = all(Ybin(ii,:) & Ybin(jj,:));
if Dx <= opts.mindistance
isDissimilar(jj) = false;
switch opts.type
case 'Ftr'
subsetIndex(jj) = true;
case 'Ftr&AP'
if Dy <= gamma
subsetIndex(jj) = true;
isVISA(jj) = false;
else
isVISA(jj) = true;
end
case 'Ftr&Good'
if Db
subsetIndex(jj) = true;
isVISA(jj) = false;
else
isVISA(jj) = true;
end
case 'Ftr&AP&Good'
if Db
if Dy <= gamma
subsetIndex(jj) = true;
isVISA(jj) = false;
else
isVISA(jj) = true;
end
else
isVISA(jj) = true;
end
otherwise
disp('Invalid flag!')
end
end
end
end
end
end
% Assess the uniformity of the data
D = squareform(pdist(X(~subsetIndex,:)));
ninst = size(D,1);
D(eye(ninst,'logical')) = NaN;
nearest = min(D,[],2,'omitnan');
model.data.unif = 1-(std(nearest)./mean(nearest));
disp(['Uniformity of the instance subset: ' num2str(model.data.unif,4)]);
end