你好,我在墊子實驗室一個新手。我正在實施AP聚類算法。我必須識別簇頭並用不同的符號表示它。
n=50;
for i=1:n
X(i,1)=rand()*500;
X(i,2)=rand()*500;
end
for i=1:n
plotcircle(X(i,1),X(i,2),3,'r');
end
x=X(:,1);
y=X(:,2);
for i=1:n
for j=i:n
distance(i,j)=(sqrt((X(i,1)-X(j,1))^2 +(X(i,2)-X(j,2))^2));
distance(j,i)=distance(i,j);
end
end
Availability=zeros(n,n);
Responsibility=zeros(n,n);
distance=distance+1e-2*randn(n,n)*(max(distance(:))-min(distance(:)));
factor=0.5;
for iter=1:100
PrevResp=Responsibility;
AvailabilityS=Availability+distance;
[X1,I]=max(AvailabilityS,[],2);
for i=1:n
AvailabilityS(i,I(i))=-1000;
end;
[Y2,I2]=max(AvailabilityS,[],2);
Responsibility=distance-repmat(X1,[1,n]);
for i=1:n
Responsibility(i,I(i))=distance(i,I(i))-Y2(i);
end;
Responsibility=(1-factor)*Responsibility+factor*PrevResp;
Aold=Availability;
Rp=max(Responsibility,0);
for k=1:n
Rp(k,k)=Responsibility(k,k);
end;
Availability=repmat(sum(Rp,1),[n,1])-Rp;
dA=diag(Availability);
Availability=min(Availability,0);
for k=1:n
Availability(k,k)=dA(k);
end;
Availability=(1-factor)*Availability+factor*Aold;
end;
E=Responsibility+Availability
I=find(diag(E)>0) % Number of Cluster head
K=length(I);% Number of clusters
fprintf('Number_of_clusters:''%d',length(I))
[tmp c]=max(distance(:,I),[],2);
c(I)=1:K ;
idx=I(c)
for k=1:K
ii=find(c==k)% group data points to k clusters
end;
selected=X(I,:);% ERROR-----------select cluster head but always at boundaries
plot(x(I),y(I),'b*');
第一個錯誤-----簇頭在邊界繪製 第二個問題是我們要繪製II集羣以不同的顏色
plz幫助我... PLZ PLZ
請花一點時間來調試和縮小你的代碼,以增加你的機會e回答。很少有人想要挖掘這一切。 –
非常連接到這個問題http://stackoverflow.com/questions/10749033/how-to-change-color-of-cluster-points-in-matlab/10749318#comment13969392_10749318 – kitchenette