2012-05-25 3 views
-2

Можно создать дубликат:
How to change color of cluster points in matlabкак определить кластер, головка

Привет я новичок в мате лаборатории. Я реализую алгоритм кластеризации 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 кластеров в различных цветах

плз помочь мне ... плз плз

+4

Пожалуйста, уделите немного времени, чтобы отладить и сузить свой код до проблемы, чтобы увеличить шансы на то, что вы ответил. Мало кто хочет все это прогнать. –

+0

Очень связанный с этим вопросом http://stackoverflow.com/questions/10749033/how-to-change-color-of-cluster-points-in-matlab/10749318#comment13969392_10749318 – kitchenette

ответ

0

Если вы поместите это в Matlab, вы получите кластеры разных цветов:

n=50; 
X = 500*rand([n,2]); 


% Computing the euclidean distance between each pair of 50 points 
distance = zeros(n); %[50 x 50] matrix 

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)) 


C = zeros(n,1); 
for j = 1:n, 
    d = zeros(length(I),1); 
    for i = 1:length(I), 
     d(i) = distance(j, I(i)) 
    end 

    [mval,midx] = min(d) 
    C(j) = midx; 
end 

symbs= {'r+','g.','bv','m*'}; 
hold on 
for i = 1: length(I), 
    plot(X(C==i,1),X(C==i,2),symbs{i}) 
    plot(X(I(i),1),X(I(i),2),symbs{i},'MarkerSize',20) 
end 
+1

Это, пожалуйста, позвольте мне сказать это в комментарий - этот вопрос должен был быть закрыт. Это дубликат предыдущего вопроса, который вы задали только вчера. Он не обрамлен как вопрос общего интереса. – kitchenette

+0

Ya это тот же вопрос ... Большое вам спасибо за вашу помощь – user1416605

+0

Здесь мы не можем представлять головки кластера в разных формах и цветах. Только точки кластера отличаются и кластерные головки не отображаются – user1416605

Смежные вопросы