[DATA PROCESSING] October 29, 2011

K-MEANS CLUSTERING

K-Means merupakan sebuah teknik yang digunakan untuk mengelompokkan (clustering) sekumpulan data ke beberapa kluster. Berdasarkan namanya kita bisa mendapat 2 penjelasan penting tentang algoritma ini: Kluster yang harus disediakan agar algoritma ini dapat mengelompokkan data adalah k. Pengelompokkan dilakukan berdasarkan centroid atau titik pusat massa nya. Titik pusat massa ini berupa rerata (mean) dari sekumpulan data yang telah di kelompokkan ke beberapa kluster. Sehingga nilai pusat titik massa ini akan berubah-ubah hingga mencapai titik dimana pusat titik massa tidak lagi mengalami perubahan.

Dengan demikian anda bisa mengerti mengapa algoritma ini dikenal sebagai algoritma KMEANS. K-Means merupakan bagian dari unsupervised learning karena tidak membutuhkan target seperti halnya supervised learning. Algoritma ini merupakan jenis paling sederhana dari unsupervised learning. Yang membatasi k-means hanya jumlah kluster. Yap! Anda harus terlebih dahulu menentukan jumlah kluster yang ingin dicapai oleh algoritma ini. Memang ini tampak mengecewakan, dan hingga saat ini pun belum ada teknik khusus yang dapat digunakan agar jumlah kluster dapat dihasilkan secara otomatis oleh algoritma ini. Memang jumlah kluster merupakan salah satu penentu kerja dari k-means, tapi ada satu hal penting yang juga mempengaruhi hasil dari pengelompokan menggunakan algoritma ini. Nilai centroids awal merupakan pemberian nilai awal sebagai acuan pengklusteran. Anda harus berhati-hati dalam memberikan nilai awal ini. Karena nilai awal yang berbeda akan kerap kali memberikan hasil pengelompokan yang berbeda. Sayangnya, belum ada juga teknik khusus yang bisa membantu kita untuk menentukan nilai centroid awal yang pas. Namun sebuah artikel pernah mengatakan agar kita memilih nilai yang terjauh satu sama lain (antar centroid). Terlepas dari fakta itu, k-means tetap bisa melakukan pengelompokan data dengan baik walaupun terkadang tidak sesuai dengan keinginan anda namun untuk mengatasi itu anda bisa melakukan trial and error sebagai penguji. Perlu diingat bahwa k-means sering digunakan di dalam sebuah loops karena centroid sebagai hasil akan valid jika tidak mengalami perubahan lagi. Bingung???? ☺ Untuk itu, kita buat saja langkah-langkah dari k-means. 1. 2. 3. 4. Tentukan jumlah kluster yang diinginkan (k) Tentukan nilai centroids awal. Hitung jarak tiap data terhadap masing-masing centroid Kelompokkan data-data tersebut ke kluster berdasarkan jarak paling dekat (minimum) terhadap sebuah kluster, dalam hal ini saya menggunakan Euclidean Distance. 5. Hitung ulang nilai centroids dengan menghitung nilai rerata (mean) data dari masingmasing kluster 6. Lakukan langkah 3-5 hingga nilai centroids tidak lagi mengalami perubahan.
[{EE&IT UGM, INDONESIA} janshendry@gmail.com]

[DATA PROCESSING] October 29, 2011
Tujuan akhirnya untuk meminimalkan fungsi error kuadrat atau yang disebut sebagai objective function:

-

-

Kelebihan K-Means Selalu konvergen atau mampu melakukan klusterisasi Tidak membutuhkan operasi matematis yang rumit, bisa dibilang operasinya sederhana Beban komputasi relatif lebih ringan sehingga klusterisasi bisa dilakukan dengan cepat walaupun relatif tergantung pada banyak jumlah data dan jumlah kluster yang ingin dicapai Kekurangan K-Means Jumlah kluster harus ditentukan Nilai centroids yang diberikan di awal bisa mempengaruhi hasil klusterisasi apabila nilainya berbeda (sensitif terhadap nilai centroids awal) Solusi kluster yang dihasilkan hanya bersifat local optima sehingga kita tidak tahu apakah itu sudah merupakan konfigurasi optimal atau belum Tergantung pada mean (rerata) Operasi matematis nya sangat sederhana

Secara sederhana langkah-langkah di atas dapat digambarkan melalui flowchart atau diagram alir data berikut ini:

Src: http://people.revoledu.com/kardi/tutorial/kMean/Algorithm.htm

Berdasarkan langkah-langkah di atas, kita dapat membuat program dengan menggunakan matlab seperti berikut ini:
[{EE&IT UGM, INDONESIA} janshendry@gmail.com]

[DATA PROCESSING] October 29, 2011
Untuk kasus 2 kluster (two cluster)

clear all; close all; clc; %% preparing data % x=[randn(100,2)+ones(100,2)]; % y=[randn(100,2)-ones(100,2)]; data=gausdata; x=data(:,1); y=data(:,2); plot(x,y,'r.','MarkerSize',12); title('DATA'); xlabel('x'); ylabel('y'); hold on; %% %% k-means clustering % 1. define number of clusters k=2; % 2. define initial value of centroids batas1=minmax(x); c1min=batas1(1); c1max=batas1(2); c1=c1min+(c1max-c1min).*rand(1,2); batas2=minmax(y); c2min=batas2(1); c2max=batas2(2); c2=c2min+(c2max-c2min).*rand(1,2); centr=[c1(1),c2(1);c1(2),c2(2)]; plot(c1(1),c1(2),'bs',c2(1),c2(2),'gs'); text(centr(1,1),centr(2,1)+.1,'c1'); text(centr(1,2),centr(2,2)+.1,'c2'); hold off; % 3. count objective function figure, itr=1; while itr<=5 for jj=1:k for ii=1:length(x)

[{EE&IT UGM, INDONESIA} janshendry@gmail.com]

[DATA PROCESSING] October 29, 2011
eud(ii,jj)=sqrt((x(ii)-centr(1,jj)).^2+(y(ii)-centr(2,jj)).^2); end end % 4. clustering data ii=1; jj=1; for kk=1:length(x) if eud(kk,1)<eud(kk,2) cluster1(ii,:)=[x(kk),y(kk)]; plot(x(kk),y(kk),'b.','MarkerSize',12); ii=ii+1; else cluster2(jj,:)=[x(kk),y(kk)]; plot(x(kk),y(kk),'g.','MarkerSize',12); jj=jj+1; end hold on; end % 5. renew centroids meancls1=mean(cluster1); meancls2=mean(cluster2); centr=[meancls1(1),meancls2(1);meancls1(2),meancls2(2)] itr=itr+1; end plot(centr(1,1),centr(2,1),'bs',centr(1,2),centr(2,2),'gs'); text(centr(1,1),centr(2,1)+.1,'c1'); text(centr(1,2),centr(2,2)+.1,'c2'); title('DATA'); xlabel('x'); ylabel('y'); legend('Cluster 1','Cluster 2'); hold off; %% end % originale by jans hendry % EE&IT UGM INDONESIA

[{EE&IT UGM, INDONESIA} janshendry@gmail.com]

[DATA PROCESSING] October 29, 2011
Fungsi untuk menghasilkan data acak gaussian adalah (beri nama gausdata.m)
function X=gausdata MU1 = [1 2]; SIGMA1 = [2 0; 0 .5]; MU2 = [-3 -5]; SIGMA2 = [1 0; 0 1]; X = [mvnrnd(MU1,SIGMA1,100);mvnrnd(MU2,SIGMA2,100)];

Hasil eksekusi dari program di atas adalah

[{EE&IT UGM, INDONESIA} janshendry@gmail.com]

[DATA PROCESSING] October 29, 2011

Bila anda perhatikan bahwa centroids awal yang digunakan disini merupakan nilai acak. Ya , saya memang menggunakan nilai acak karena memudahkan dalam pemberian nilai dan tidak terlalu merepotkan untuk menentukan nilai terbaik atau yang paling cocok. Anda bisa mengganti bagian tersebut untuk menetapkan nilai awal yang sesuai dengan keinginan anda. Tentu saja kita akan coba untuk membuat klusterisasi untuk kluster yang lebih dari 2 pada artikel selanjutnya dengan dasar teori yang persis sama. Sources: http://people.revoledu.com/kardi/tutorial/kMean/Algorithm.htm http://home.dei.polimi.it/matteucc/Clustering/tutorial_html/kmeans.html http://www.rob.cs.tu-bs.de/content/04-teaching/06-interactive/Kmeans/Kmeans.html

Terima Kasih.

[{EE&IT UGM, INDONESIA} janshendry@gmail.com]

Sign up to vote on this title
UsefulNot useful