function [c]=APkspectclust(C,k,N)
%%%%%%%%%%%%%%%%%%%%%%
tic
%%%%%%%%%%%%%% For question 9 comment out the next 3 lines
gnd=zeros(0,0);
for i=1:k
gnd=[gnd;ones(N(i),1)*i];
end
% allpts=[cluster1;cluster2]; %还是50*2的矩阵
goto=length(C);
N=size(C,1);
M=size(C,2);
%goto=50
%%
%% compute A (step 1)
maxdist=0;
WW=zeros(N,N);
for i=1:N-1
for j=i+1:N
dist=norm(C(i,:)-C(j,:));
WW(i,j)=dist;
WW(j,i)=WW(i,j);
if(dist>maxdist)
maxdist=dist;
else
continue;
end
end
end
sigma=0.05*maxdist;
W1=WW.*WW;
S=exp(-W1/(2*sigma^2));
A=S-diag(diag(S));
% W=-(WW-min(WW(:)))/(max(WW(:))-min(WW(:)));
% W1=W.*W;
% S=exp(-W1/(2*sigma^2));
% A=S-diag(diag(S));
% subplot(2,3,2) %2*3列的画布
% imagesc(A); colorbar; %把矩阵的元素数按色彩对应到图上,并添加色标值
%
%% step 2
D = diag(sum(A'));
L=D^(-.5)*A*D^(-.5);
% subplot(2,3,3)
% imagesc(L); colorbar;
%% step 3
[X,di]=eig(L); %特征向量,特征值
[Xsort,Dsort]=eigsort(X,di);
Xuse=Xsort(:,1:k); %最大的两个特征值对应的2个特征向量
% subplot(2,3,4)
% imagesc(Xuse); colorbar;
%% normalize X to get Y (step 4)
Xsq = Xuse.*Xuse;
divmat=repmat(sqrt(sum(Xsq')'),1,k);
Y=Xuse./divmat;
% subplot(2,3,5)
% imagesc(Y); colorbar;
%% step 5/6
[c]=APkmeans(Y,k);
kk=c;
for i=1:k
ci=find(kk==i);
end
c = bestMap(gnd,c); %calculate accuracy
AC = length(find(gnd == c))/length(gnd);
fprintf('the accuracy is %f\n',AC);
MIhat = MutualInfo(gnd,c);
fprintf('the NMI is %f\n',MIhat);
toc