function [cd, ra, kafangF, Ff, qaf] = criticaldifference(s, labels, flag, alpha)
% s=[6 5.6 4 3.3 2 1;
% 6 5 4 3 2 1;
% 3 4 2 4 3 2];
% 每一行是算例,每一列是算法
% labels={'SCV1V1','SVC1VA','SVR','CSSVC','SVMOP','NNOP','SVMOP','NNOP','SVMOP','NNOP'};%按s表的表头顺序
% flag是0或1; 0是小的优排序在前,1是大的优排序在前
% alpha 0.1或0.05或0.01
%
if flag ==1
s=1-s;
end
if nargin < 4
alpha = 0.05;
end
% convert scores into ranks
[N,k] = size(s);
[S,r] = sort(s');
idx = k*repmat(0:N-1, k, 1)' + r';
R = repmat(1:k, N, 1);
S = S';
for i=1:N
for j=1:k
index = S(i,j) == S(i,:);
R(i,index) = mean(R(i,index));
end
end
r(idx) = R;
r = r'; %排序矩阵,小-大的在1,2,3
ra = r;
pingju = mean(ra);
kafangF = 12*N/(k*(k+1))*(sum(pingju.^2)-k*(k+1)^2/4);
Ff = (N-1)*kafangF/(N*(k-1)-kafangF);
% compute critical difference
if alpha == 0.01
qalpha = [0.000 2.576 2.913 3.113 3.255 3.364 3.452 3.526 3.590 3.646 ...
3.696 3.741 3.781 3.818 3.853 3.884 3.914 3.941 3.967 3.992 ...
4.015 4.037 4.057 4.077 4.096 4.114 4.132 4.148 4.164 4.179 ...
4.194 4.208 4.222 4.236 4.249 4.261 4.273 4.285 4.296 4.307 ...
4.318 4.329 4.339 4.349 4.359 4.368 4.378 4.387 4.395 4.404 ...
4.412 4.420 4.428 4.435 4.442 4.449 4.456 ];
elseif alpha == 0.05
qalpha = [0.000 1.960 2.344 2.569 2.728 2.850 2.948 3.031 3.102 3.164 ...
3.219 3.268 3.313 3.354 3.391 3.426 3.458 3.489 3.517 3.544 ...
3.569 3.593 3.616 3.637 3.658 3.678 3.696 3.714 3.732 3.749 ...
3.765 3.780 3.795 3.810 3.824 3.837 3.850 3.863 3.876 3.888 ...
3.899 3.911 3.922 3.933 3.943 3.954 3.964 3.973 3.983 3.992 ...
4.001 4.009 4.017 4.025 4.032 4.040 4.046];
elseif alpha == 0.1
qalpha = [0.000 1.645 2.052 2.291 2.460 2.589 2.693 2.780 2.855 2.920 ...
2.978 3.030 3.077 3.120 3.159 3.196 3.230 3.261 3.291 3.319 ...
3.346 3.371 3.394 3.417 3.439 3.459 3.479 3.498 3.516 3.533 ...
3.550 3.567 3.582 3.597 3.612 3.626 3.640 3.653 3.666 3.679 ...
3.691 3.703 3.714 3.726 3.737 3.747 3.758 3.768 3.778 3.788 ...
3.797 3.806 3.814 3.823 3.831 3.838 3.846];
else
error('alpha must be 0.01, 0.05 or 0.1');
end
qaf = qalpha(k);
cd = qaf*sqrt(k*(k+1)/(6*N));
mytp =0;
if k<5
step =35;
elseif k<7
step =25;
elseif k<9
step =18;
elseif k<11
step =14;
mytp =6;
elseif k<13
step =14;
mytp =12;
else
step =14;
mytp =20;
end
figure(1);
clf
set(gcf,'Position',[500 400 550 280])
% set(gca,'position',[0.1 0.1 0.6 0.5]);
% set(gcf,'color','white')
axis off
axis([-0.2 1.2 -30 140]);
axis xy
tics = repmat((0:(k-1))/(k-1), 3, 1);
line(tics(:), repmat([64+mytp, 68+mytp, 64+mytp], 1, k), 'LineWidth', 1.5, 'Color', 'k');
line([0 0 0 cd/(k-1) cd/(k-1) cd/(k-1)], [107+mytp 103+mytp 105+mytp 105+mytp 103+mytp 107+mytp], 'LineWidth', 1.5, 'Color', 'r');
text(0.03, 115+mytp, ['CD = ' num2str(cd)], 'FontName','Times New Roman', 'FontSize', 14, 'HorizontalAlignment', 'left', 'Color', 'r');
for i=1:k
text((i-1)/(k-1), 78+mytp, num2str(k-i+1), 'FontSize', 14, 'HorizontalAlignment', 'center');
end
% compute average ranks
r = mean(r);
[r,idx] = sort(r);
% compute statistically similar cliques
clique = repmat(r,k,1) - repmat(r',1,k);
clique(clique<0) = realmax;
clique = clique < cd;
for i=k:-1:2
if all(clique(i-1,clique(i,:))==clique(i,clique(i,:)))
clique(i,:) = 0;
end
end
n = sum(clique,2);
clique = clique(n>1,:);
n = size(clique,1);
% labels displayed on the right
for i=1:ceil(k/2)
if i==1
line([(k-r(i))/(k-1) (k-r(i))/(k-1) 1], [64+mytp 64+mytp-3*(n+1)-step*i 64+mytp-3*(n+1)-step*i], 'Color', 'b');
text(1.02, 65+mytp - 3*(n+1) - step*i, labels{idx(i)}, 'FontName','Times New Roman', 'FontSize', 12, 'VerticalAlignment', 'middle', 'HorizontalAlignment', 'left', 'Color', 'b');
else
line([(k-r(i))/(k-1) (k-r(i))/(k-1) 1], [64+mytp 64+mytp-3*(n+1)-step*i 64+mytp-3*(n+1)-step*i], 'Color', 'k');
text(1.02, 65+mytp - 3*(n+1) - step*i, labels{idx(i)}, 'FontName','Times New Roman', 'FontSize', 12, 'VerticalAlignment', 'middle', 'HorizontalAlignment', 'left', 'Color', 'k');
end
end
% labels displayed on the left
for i=ceil(k/2)+1:k
line([(k-r(i))/(k-1) (k-r(i))/(k-1) 0], [64+mytp 64+mytp-3*(n+1)-step*(k-i+1) 64+mytp-3*(n+1)-step*(k-i+1)], 'Color', 'k');
text(-0.02, 65+mytp - 3*(n+1) -step*(k-i+1), labels{idx(i)}, 'FontName','Times New Roman', 'FontSize', 12, 'VerticalAlignment', 'middle', 'HorizontalAlignment', 'right', 'Color', 'k');
end
% group cliques of statistically similar classifiers
for i=1:size(clique,1)
R = r(clique(i,:));
line([((k-min(R))/(k-1)) ((k-min(R))/(k-1)) ((k-min(R))/(k-1)) ((k - max(R))/(k-1)) ((k - max(R))/(k-1)) ((k - max(R))/(k-1))], [57+mytp+1-5*i 57+mytp-1-5*i 57+mytp-5*i 57+mytp-5*i 57+mytp-1-5*i 57+mytp+1-5*i], 'LineWidth', 2, 'Color', 'r');
end
%减少空白
set(gca, 'Position', get(gca, 'OuterPosition') - ...
get(gca, 'TightInset') * [-1 0 1 0; 0 -1 0 1; 0 0 1 0; 0 0 0 1]);
评论0
最新资源