Sunday, December 2, 2012

Metode Clustering: K-means

Pengantar
Dalam artikel sebelumnya, telah dibahas perbedaan clustering dan classification. Dalam artikel ini, kita akan membahas salah satu metode clustering yang paling dasar, yaitu K-means Clustering.
Apa itu K-means?
Sebelum kita melangkah lebih jauh, mungkin ada baiknya mengetahui latar belakang mengapa disebut K-means. K di sini dimaksudkan sebagai konstanta jumlah cluster yang diinginkan. Jadi, berhubung kita sudah mengasumsikan jumlah cluster yang akan dihasilkan algoritma ini, maka K didefiniskan diawal (contoh: K = 5 cluster).
Means dalam hal ini berarti nilai suatu rata-rata dari suatu grup data yang dalam hal ini didefinisikan sebagai cluster.
Jika kita menggabungkan kedua hal tersebut, maka dapat diartikan bahwa algoritma ini menggunakan K nilai rata-rata yang setiap nilai rata-ratanya dihitung dari suatu cluster. Kalau ada 5 cluster, maka akan ada 5 rata-rata yang dipakai oleh algoritma ini.

Model Matematik
Seperti yang kita tau bahwa metode K-means ini menggunakan nilai rata-rata yang diambil dari setiap cluster. Maka berikut adalah cara bagaimana K-means menghitung rata-rata dari setiap cluster
clip_image002
Ck adalah nilai rata-rata dari cluster K (contoh: C1 adalah nilai rata-rata dari cluster yang pertama). clip_image002[5] adalah semua anggota dari cluster K.
Pertanyaaan berikutnya adalah, bagaimana cara memilih anggota dari suatu cluster? Cara memilihnya mudah. Andaikan ada suatu data, kita ingin mengetahui ke dalam anggota cluster manakah data tersebut paling cocok dimasukkan. Caranya adalah dengan menghitung selisih antara data dan setiap nilai rata-rata cluster. Cluster yang nilai rata-ratanya yang memiliki selisih terkecil dengan data tersebut merupakan cluster dimana data tersebut dikategorisasikan. Secara matematis dapat didefinisikan sebagai berikut.
clip_image002[3]
X adalah data yang sedang kita tentukan ke cluster mana harus dimasukkan. Ck adalah nilai rata-rata dari cluster k. K adalah jumlah cluster. Jadi, Cluster T merupakan cluster yang paling cocok untuk data X, karena cluster T memiliki selisih terkecil.
Bagaimana cara menghitung selisih? Kita bisa menggunakan berbagai macam metode seperti  Eucledian distance, Mahalanobis distance, Manhattan distance, Normalised Cosines distance. Metode yang paling populer adalah dengan menggunakan Eucledian distance.
Kita sudah mengetahui bagaimana algoritma menghitung mean dari masing-masing cluster, dan bagaimana algoritma mengelompokan data ke dalam cluster-cluster yang ada. Pertanyaan berikutnya adalah, ketika pertama kali algoritma dijalankan, kita hanya punyai adalah jumlah cluster yang akan dihasilkan (K). Nah! untuk menghitung nilai rata-rata dari setiap cluster diperlukan anggota, dan untuk menentukan anggota, kita memakai informasi nilai rata-rata. Ini mirip dengan masalah ayam dan telur, yang mana yang lebih dahulu. Untuk mengatasinya, kita akan menentukan terlebih dahulu nilai rata-rata dari setiap cluster. Bagaimana caranya? Ada banyak cara, untuk artikel singkat ini, kita akan menentukannya secara acak (random). Tentunya dalam menentukan angka acak kita tidak sembarangan sebab ini akan membuat algoritma tidak berjalan dengan baik. Cara yang paling mudah adalah memilih data yang ada sebagai nilai rata-rata dari suatu cluster. Sebagai contoh, misalkan ada 3 data yaitu (1,0), (1,2), (1,4). K kita tentukan K = 2. Jadi ada dua nilai rata-rata yang perlu kita tentukan diawal. Secara acak kita memilih C1 = (1,0) dan C2 = (1,4).
Setelah kita menentukan nilai rata-rata awal dari setiap cluster, selanjutnya algoritma akan meng-update keanggotaan dari setiap cluster. Setelah itu algoritma akan menghitung kembali nilai rata-rata dari setiap cluster berdasarkan anggotanya yang baru saja di-update.
Pertanyaan berikutnya, kapan berhenti? Algoritma akan berhenti ketika tidak ada perubahan keanggotaan dari setiap cluster.
Algoritma
Baik, sekarang kita akan melihat algoritma K-means clustering ini.
  1. Tentukan K
  2. Tentukan Ck untuk semua cluster dengan memilih secara acak (random) dari data yang ada
  3. Update keanggotaan dari setiap cluster
  4. Update Ck berdasarkan anggota yang baru saja di-update
  5. Lakukan langkah 3 dan 4, sampai tidak ada perubahan keanggotaan dari setiap cluster.
Mudah bukan?
Mungkin ada beberapa dari anda bertanya mengapa algoritma ini benar? Dalam konteks pertanyaan ini, yang ditanyakan adalah apakah algoritma ini selalu konvergen atau dalam arti, apakah algoritma ini dapat selalu berhenti, atau akan berjalan terus. Jawaban nya adalah hampir dapat dipastikan algoritma ini dapat konvergen atau dapat dapat berhenti, dengan beberapa catatan. Untuk para pembaca yang tertarik untuk mengetahui lebih jauh sifat konvergensi dari K-means, dapat meneliti lebih jauh dengan mencari literature yang berhubungan dengan konvergensi K-means.
Apakah hasil dari setiap eksekusi algoritma pada data yang sama adalah selalu sama? Jawabannya tidak. Karena ada unsur random disini, maka ada kemungkinan algoritma akan menghasilkan hasil yang berbeda-beda. Untuk memastikannya, biasanya algoritma dieksekusi berulang kali, dan  hasilnya dianalisa.

Penutup
Kita sudah melihat bagaimana algoritma K-means dan model matematiknya. Metode K-means adalah metode yang paling dasar dan paling populer dalam clustering. Namun demikian, banyak sekali kekurangan dalam metode ini. Metode ini biasanya dapat berjalan dengan baik ketika data yang sedang diproses mempunyai model Gaussian. Kalau kita tidak tau model dari data yang kita punya, tidak usah takut karena biasanya dalam clustering kita bisa mencoba-coba terus menerus baik itu mengubah nilai K, maupun mengeksekusi algoritma berulang kali sampai kita puas dengan hasilnya.
Baca Selengkapnya...

Friday, November 30, 2012

Clustering vs Classification

Diambil dari http://pengolahancitra.com, bahasanya enak dibaca, saya edit sedikit biar komplit.

Pengantar

Pada artikel singkat ini, kita akan membahas mengenai perbedaan antara clustering dan classification. Adalah penting untuk mengetahui perbedaan antara keduanya. Karena keduanya membawa pada pendekatan dan solusi yang berbeda.

Clustering
Secara formal clustering di definisikan sebagai suatu proses unsupervised untuk mengelompokan data yang memiliki karakteristik tertentu yang sama. 

Di Wikipedia, Cluster analysis atau clustering adalah pengelompokan object-object kedalam kelompok-kelompok (yang disebut cluster) sehingga object-object yang ada di dalam cluster yang sama lebih mirip satu dengan yang lain dibandingkan dengan cluster yang berbeda. 

Sederhananya seperti ini. Misalkan kita diberikan kelompok data, katakanlah data tinggi anak-anak pada sekolah SD. Katakanlah kita ingin mengelompokkan data-data ini kedalam 3 kelompok yang mana setiap kelompok memiliki tinggi yang kurang lebih sama. Problem tersebut dapat dikategorikan dalam clustering problem.

Pendekatan yang ada dalam Clustering
Ada banyak pendekatan yang ada dalam clustering. Salah satu yang paling terkenal adalah pendekatan k-means clustering. huruf K yang ada pada K-means berarti kita mengasumsikan bahwa kita mengetahui jumlah kelompok yang akan dihasilkan. 

Sederhananya algoritma ini adalah sebagai berikut. Kita asumsikan ada K kelompok. Katakanlah ada 3 kelompok. Lalu, kita tentukan secara acak 3 cluster centre. Lalu kelompokkan data-data kedalam kelompok yang memiliki jarak terpendek antara data tersebut dengan cluster centre. Selanjutnya, kalkulasikan centre baru pada setiap kelompok. Lakukan langkah tersebut hingga pusat kelompok tidak berubah. Mudah bukan?

Bagaimana kalau saya tidak mempunyai informasi mengenai jumlah kelompok yang mungkin terjadi? Ada caranya! yaitu dengan memakai leader-follower algorithm. Sederhananya, pendekatan ini memakai graph theory. Pertama2x kita pilih satu data menjadi cluster representation, selanjutnya, diberikan data yang lain, kita hitung jarak antara data tersebut dengan cluster representation yang ada. Jika jaraknya terlalu besar, maka data tersebut akan dikelompokkan dalam cluster yang baru. 

Dalam clustering, biasanya kita menghadapi jumlah data yang amat banyak. Nah! ada beberapa pendekatan, ada yang disebut offline clustering , ada yang disebut online clustering.  

Offline clustering artinya pendekatan tersebut tidak dapat digunakan dalam aplikasi real-time, mungkin saja prosesnya membutuhkan waktu 1 hari. Sebaliknya online clustering mungkin bisa memproses data dalam hitungan detik. Tentunya tidak ada makan siang yang gratis. Kita harus mengorbankan beberapa hal untuk mendapatkan keuntungan di hal yang lainnya.

Kalau diperhatikan, k-means clustering termasuk dalam offline clustering. Ini disebabkan pada setiap iterasi pendekatan ini memproses semua datanya. Jadi jika ada 1 juta data, setiap kali iterasi, ada 1 juta data yang di proses. Jika dibutuhkan sekitar 500 000 iterasi, artinya komputer akan memiliki beban sekitar 500 milyar komputasi.

Sebaliknya leader-follower algorithm dapat dikategorikan dalam online clustering. Dalam pendekatan ini, data yang sudah dikelompokkan tidak perlu diproses lagi. Dan dalam setiap iterasinya hanya akan memproses 1 data saja. Jadi kalau ada 1 juta data, komputer hanya akan memiliki beban 1 juta komputasi.

Classification
Berbeda dengan clustering, classification memiliki tujuan untuk mengklasifikasikan suatu data ke dalam kelompok kelas yang sudah ada. 

Sebagai contoh, misalkan diberikan sekelompok sampel darah orang. Kita sudah tau jumlah kelompok golongan darah. Maka tugas kita hanyalah menentukan suatu sampel darah masuk ke kelompok mana. Jadi intinya, tidak akan ada pembentukan kelompok baru. Dan biasanya prosesnya supervised. Dalam arti ada training yang dilakukan, dan dalam training tersebut, kita diberikan sekelompok sampel darah yang sudah diketahui masuk ke kelompok manakah sampel tersebut.

Pendekatan yang ada dalam classification
Ada banyak! contohnya adalah neural network. Dalam pendekatan ini, neural network dilatih dengan menggunakan data yang sudah diketahui masuk ke kelompok mana data tersebut. Setelah pelatihan, prosesnya cukup sederhana, yaitu dengan memasukkan data baru (yang tidak termasuk dalam data training) ke dalam neural network, lalu neural network akan memberikan informasi termasuk ke dalam kelompok manakah data baru tersebut.

Contoh lain adalah pendekatan K-nn (k nearest neighbour). Dalam hal ini setiap data baru akan dibandingkan dengan data training. Lalu 3 data training terdekat (misalkan kita ambil k = 3) dengan data baru akan diambil. Misalkan ketiga data tersebut masuk ke dalam kelompok 1, 2 dan 1, maka data baru tersebut dimasukan ke dalam kelompok 1 (seperti voting, karena suara yang terbanyak adalah 1, maka keputusannya adalah 1).

Ringkasan sedikit
Maka jelas, kalau clustering dipakai ketika kita tidak mengetahui bagaimana data harus dikelompokkan. Kita bisa mengasumsikan jumlah kelompok yang ada. Keluaran pendekatan ini adalah data yang sudah dikelompokkan. Di lain pihak, dalam classification, kita sudah mempunyai informasi mengenai bagaimana data tersebut dikelompokkan. Tugas kita hanyalah melakukan training pada sistem dengan data yang sudah diberikan label (ke dalam kelompok manakah data tersebut dikelompokkan), selanjutnya sistem akan mengklasifikasikan data-data yang baru ke dalam kelompok yang ada. Tidak akan ada pertambahan kelompok.

Baca Selengkapnya...

Tuesday, November 20, 2012

Image Enhancement vs Image Restoration


Acapkali dalam menghadapi permasalahan di pengolahan citra, kita berhadapan dengan citra yang mempunyai pengotor (noise). Dalam proses, kita ingin menghilangkan pengotor-pengotor tersebut. Ada dua macam teknik yang kita dapat lakukan, yaitu image enhancement dan image restoration. Apakah berbedaannya? Marilah kita lihat satu persatu.

Apa itu pengotor?
Noise atau pengotor citra biasanya didapat dari proses dijitasi citra. Apa itu proses dijitasi citra? ini adalah proses meng-capture objek di dunia nyata kedalam citra dijital. Bingung? Singkatnya, kalau kita memotret sesuatu dengan kamera dijital, sebenarnya kita sedang melakukan proses dijitasi citra. Nah... kadang-kadang lensa kamera kita kotor kan? jadi ada bintik-bintik di foto yang didapat. Bintik-bintik itu salah satu jenis pengotor. Sebenarnya ada banyak jenis pengotor. Jenis-jenis pengotor ini akan dibahas pada artikel terpisah. Untuk sementara, asumsikan bahwa pada proses "Pemotretan" (proses dijitasi citra), ada banyak hal yang menyebabkan citra tidak sempurna (memiliki pengotor). Oh ya, jenis pengotor yang lainnya adalah pengotor yang berasal dari hardware (cth: kamera yang setengah rusak).

Image Restoration
Teknik ini dipakai pada saat kita dapat memodelkan pengotor.
Pengotor dapat dimodelkan? Kenapa tidak?! Ada beberapa jenis pengotor yang dapat kita modelkan, misalkan pengotor yang berasal dari sensor yang kurang sempurna, pengotor yang berasal dari sinyal transmisi yang kurang baik sehingga pada saat transimisi data citra tidak diterima dengan baik. Salah satu contoh pengotor yang terkenal adalah salt-and-pepper noise (garam dan merica). Jenis pengotor ini didapatkan karena sensor yang kurang sempurna. Inilah salah satu contoh salt-and-pepper noise.


Perhatikan pada citra diatas, citra sebelah kiri adalah citra dengan pengotor salt-and-pepper, citra disebelah kanan adalah citra tanpa pengotor. Secara matematis, pengotor jenis ini dapat dimodelkan dengan memakai random variable yang ada pada ilmu probabilitas. Rumusnya adalah sebagai berikut.


Biasanya pengotor-pengotor dimodelkan secara matematis dengan menggunakan Probabilistic Density Function (PDF). Kenapa? Karena, noise itu random bukan? maksudnya, tidak dapat diterka, dimana dan kapan dia muncul. Namun demikian, kita dapat mengira-ngira kemungkinan suatu pengotor itu muncul. Nah ilmu mengira-ngira kemungkinan itu ada di ilmu probabilitas.

Lalu setelah kita mengetahui jenis pengotornya. Apa yang kita lakukan berikutnya? Wah gampang itu... biasanya kalau kita sudah tau jenis pengotornya, dan kita tau kalau jenis pengotor tersebut dapat dimodelkan. Hal berikutnya adalah mencari filter yang dapat menghilangkan noise tersebut. Contohnya, pada kasus salt-and-pepper noise , untuk menghilangkan noise tersebut secara sempurna adalah dengan menggunakan median filter. Dijamin mutu, pasti pengotornya akan hilang seketika.

Jadi esensi image restoration adalah ketika kita dapat memodelkan pengotor, dan pengotor tersebut sudah dikenal, kita tinggal menggunakan metode yang sudah ada untuk menghilangkan pengotor. Dan biasanya hasil image restoration cukup memuaskan. Kebanyakan hasilnya adalah, kita mendapatkan citra tanpa pengotor tersebut.

Image Enhancement

Teknik ini dipakai pada saat kita tidak dapat memodelkan pengotor. Biasanya proses ini dilakukan secara heuristic, alias coba-coba sampai puas. Kalau pada proses image restoration kita tau kapan saatnya berhenti, pada image enhancement penilaian subjektif sangat berpengaruh. Proses ini baru berhenti ketika kita merasa puas akan hasil yang didapatkan.

Ada banyak metode yang dapat dipakai pada image enhancement. Metode tersebut sebagian besar adalah berupa filter. Filter-filter  ini nantinya akan dikonvolusi dengan citra untuk mendapatkan hasil yang baik. Untuk proses filtering akan dibahas secara terpisah. Selain dengan menggunakan filter, ada metode-metode lain seperti transformasi, histogram, contrast-stretching, dan sebagainya. Contoh metode yang paling mudah adalah power-law transformation pada grey-level. Pada prinsipnya setiap nilai grey level pada pixel diganti dengan nilai hasil perhitungan formula tertentu. Bingung? Baik, marilah kita lihat formula power-law transformation ini.


n adalah nilai grey level yang baru, r adalah nilai grey level yang lama, s dan a ditentukan sesuai dengan selera. Misalkan pada koordinat (1,1), nilai grey-level untuk komponen red adalah 120. Maka, dengan s = 1 dan a = 0.5 nilai ini akan diganti menjadi 10.9. Kalau dilihat, proses ini akan membuat setiap nilai menuju nilai 0, alias membuat citra lebih gelap!. Ingin membuat lebih terang? Mudah, ubah a menjadi 1.2 alhasil, citra akan semakin terang.
Berikut ini adalah contoh dari power-law transformation.





Citra sebelah kiri adalah citra hasil power-law transformation dengan nilai peubah a 1.2, sebelah kanan adalah dengan nilai peubah 0.5. Yang mana yang lebih baik? Itu tergantung kebutuhan. Mungkin ada yang lebih memerlukan citra yang terang, atau mungkin ada yang lebih membutuhkan citra yang lebih gelap. 

Sebagai kesimpulan, kita dapat melihat perbedaan yang mendasar antara image restoration dan image enhancement. Image restoration adalah proses yang pasti, dan menghasilkan citra yang baik. Biasanya dapat dilakukan bila jenis pengotor dapat dimodelkan. Di lain pihak, image enhancement adalah proses heuristik yang sangat bergantung dari kebutuhan dari setiap kasus. Biasanya dipakai ketika pengotor tidak dapat dimodelkan.
Baca Selengkapnya...