Amir Hamzah

Just learning material sharing …
Subscribe

Archive for June, 2011

K-MEAN CLUSTERING

June 01, 2011 By: amir Category: Fuzzy Logic, Pemrograman No Comments →

K-MEAN Clustering merupakan algoritma partisional yang paling sederhana. Algoritma clustering ini diawali dengan pemilihan objek vektor secara acak sebanyak K buah sebagai nilai awal, yang diangap sebagai K pusat cluster.  Selanjutnya algoritma di proses dengan setiap kali memperbaharui nilai pusat cluster. Pusat cluster yang baru diperoleh dengan menghitung ulang rata-rata seluruh vektor  dalam cluster tersebut. Untuk menentukan vektor objek masuk dalam cluster mana, maka pada setiap iterasi semua vektor objek dihitung nilai jaraknya terhadap pusat-pusat cluster yang ada. pusat cluster yang memiliki nilai jarak terkecil terhadap vektor objek yang bersagkutan dipilih sebagai cluster bagai objek tersebut.

Berikut ini algoritma K-MEAN CLUSTERING :

  1. Ambil K objek sebagai seed dari K pusat kluster
  2. Untuk semua objek: cari kluster dengan jarak terdekat, dan tetapkan objek masuk dalam kluster tersebut.
  3. Hitung ulang pusat kluster dengan rata-rata objek dalam kluster tersebut
  4. Hitung fungsi kriteria dan lakukan evaluasi. Jika fungsi kriteria  berubah cukup kecil algoritma berhenti.

Adapun code MATLAB adalah sebagai berikut :

function [c]=kmean(x,k)

[m,n]=size(x)

%m=dimensi vektor

%n=cacah objek

c=zeros(1,n);  M=zeros(m,k);

bilacak=acak(k,n);

for i=1:k    M(:,i)=x(:,bilacak(i));   end

disp(‘SEED :’)

for i=1:k    sprintf(‘Seed ke- %d adalah objek ke- %d’,i,bilacak(i))

x(:,bilacak(i))

end

T0=0;  T1=10; galat =1e-5;  ITER=0;

while ( abs(T1-T0) > galat )

for i=1:n

jmin=1e8;

for j=1 : k

jarak=norm( x(:,i) – M(:,j ) );

if(jarak < jmin )

c(:,i) =j ;  jmin=jarak;

end

end

end

%meralat pusat cluster

CE=zeros(1,k);   M=zeros(m,k);

for i=1:n

M(:, c(i) ) = M (:, c(i)) + x(:,i);

CE(:, c(i) ) = CE(:, c(i) ) +1;

end

for i=1:k     M(:,i)=M(:,i)/CE(:,i);   end

T0=T1;   T1=0;

%mengitung fungsi tujuan baru

for i=1:n

T1=T1+ norm( x(:,i)-M(:,c(i)) );

end

fungsiTujuan=T1

ITER=ITER+1

pause

end %akhir while

 

%%%%%%%%% digunakan untuk mengacak bilangan 1 sampai K %%%%%%%%%%

% disimpan dalam file terpisah : acak.m

function [r]=acak(k,n)

r=[]; c=0;

while (c<k)

bilacak=round(rand*n)

ada=0;

for j=1:c        if( r(j)== bilacak)ada=1; end

end

if(bilacak>0)

if(~ada)

r=[r bilacak]

c=c+1;

end

end

end

%%%%%%%%%%%%%%%%%%%%%%%%% DATA DALAM BENTUK %%%%%%%%%%

x = Matrik berukuran m x N ( m baris , N kolom)

m =dimensi vektor

N=cacah sampel data