Advertisement
Guest User

Untitled

a guest
Mar 20th, 2017
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Octave 1.28 KB | None | 0 0
  1. parameters = rand(2,4);
  2. means = rand(4,2)*10;
  3.  
  4. nb_points = 200;
  5. centroids = rand(2,4)*10;
  6.  
  7. pointsX = normrnd(parameters(1,1),parameters(2,1),1,nb_points/4) .+means(1,1);
  8. pointsY = normrnd(parameters(1,1),parameters(2,1),1,nb_points/4) .+ means(1,2);
  9.  
  10. for i=2:4
  11.  pointsX = [pointsX , normrnd(parameters(1,i),parameters(2,i),1,nb_points/4) .+means(i,1)];
  12.  pointsY = [pointsY , normrnd(parameters(1,i),parameters(2,i),1,nb_points/4) .+means(i,2)];
  13. endfor
  14.  
  15. scatter(pointsX,pointsY,'b','filled');
  16. hold on;
  17.  
  18.  
  19. y=zeros(nb_points,1);
  20.  
  21.  
  22.  
  23. for cvg = 1:500
  24.   centromeans = zeros(4,2);
  25.   for i=1:nb_points
  26.     min = sqrt( (centroids(1,1)-pointsX(i))^2 + (centroids(2,1)-pointsY(i))^2 );
  27.     y(i) = 1;
  28.     for j=2:4
  29.       argmin = sqrt( (centroids(1,j)-pointsX(i))^2 + (centroids(2,j)-pointsY(i))^2 );
  30.       if argmin < min
  31.         min = argmin;
  32.         y(i) = j;
  33.       endif
  34.     endfor
  35.    
  36.     centromeans(y(i),1) = centromeans(y(i),1) + pointsX(i);
  37.     centromeans(y(i),2) = centromeans(y(i),2) + pointsY(i);
  38.    
  39.   endfor
  40.  
  41.   for i=1:4
  42.     if(sum(y == i) > 0)
  43.       centroids(1,i) = centromeans(i,1)/sum(y == i);
  44.       centroids(2,i) = centromeans(i,2)/sum(y == i);
  45.     endif
  46.   endfor
  47.  
  48. endfor
  49.  
  50. scatter(centroids(1,:),centroids(2,:),'r','filled');
  51. hold on;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement