-
Notifications
You must be signed in to change notification settings - Fork 0
/
ri.m
45 lines (40 loc) · 790 Bytes
/
ri.m
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
function [Acc,RI,match]=ri(T,idx)
k=max(T);
n=length(T);
for i=1:k
temp=find(T==i);
a{i}=temp;
end
b1=[];
t1=zeros(1,k);
for i=1:k
tt1=find(idx==i);
for j=1:k
t1(j)=sum(ismember(tt1,a{j}));
end
b1=[b1;t1];
end
Members=zeros(1,k);
P = perms((1:k));
Acc1=0;
for pi=1:size(P,1)
for ki=1:k
Members(ki)=b1(P(pi,ki),ki);
end
if sum(Members)>Acc1
match=P(pi,:);
Acc1=sum(Members);
end
end
rand_ss1=0;
rand_dd1=0;
for xi=1:n-1
for xj=xi+1:n
rand_ss1=rand_ss1+((idx(xi)==idx(xj))&&(T(xi)==T(xj)));
rand_dd1=rand_dd1+((idx(xi)~=idx(xj))&&(T(xi)~=T(xj)));
end
end
RI=200*(rand_ss1+rand_dd1)/(n*(n-1))/100;
Acc=Acc1/n;
match=[1:k;match];
end