Catatan penting : Jika Anda benar-benar awam tentang apa itu Python, silakan klik artikel saya ini. Jika Anda awam tentang R, silakan klik artikel ini.
Kali ini saya akan berbagi tentang salah satu teknik dari metode clustering. Seperti sudah diketahui di pembahasan sebelumnya bahwa metode clustering adalah bagian dari unsupervised learning. Artinya bahwa metode ini bisa mengelompokkan data ke dalam beberapa bagian tanpa kita beri contoh, sehingga ia bisa belajar sendiri dari pola-pola yang ada di datanya.
Di metode clustering, saya sebelumnya juga sudah membahas tentang teknik K-Means. Di teknik tersebut, kita sudah menentukan berapa jumlah kluster yang ingin dibuat terlebih dahulu, baru setelah itu algoritma K-Means akan mengelompokkan data sesuai jumlah kluster yang sudah kita tentukan.
Berbeda dengan K-Means, hierarchical clustering (HC) akan mengelompokkan datanya ke dalam beberapa kluster, sampai terbentuklah 1 kluster utuh. Baru dari situ kita pecah-pecah ke dalam beberapa kluster sesuai dengan jumlah yang kita inginkan.
Bisa dikatakan bahwa kita mulai dari belakang (mengelompokkan kluster satu per satu) ke depan (hingga menjadi 1 kluster utuh) lalu sedikit mundur ke belakang (memecah-mecah kluster).
Untuk memudahkan pemahaman, mari kita lihat ilustrasi sebagai berikut:
Melalui ilustrasi di atas, anggap saja kita belum mengetahui kelompok (kluster) apa saja yang bisa dibuat dari dataset yang kita miliki. Walaupun secara visual (untuk memudahkan) kita bisa tahu bahwa ada 3 kluster yang bisa dibentuk, teknik HC akan membentuk 3 kluster berdasarkan jarak terdekat antara masing-masing data poin yang ada.
Perlu diketahui bahwa teknik HC terdiri dari 2 jenis:
- Agglomerative: memulai dari bawah ke atas (bottom up)
- Divisive: memulai dari atas ke bawah (top down)
Untuk pembahasan teknik HC kali ini masuk ke dalam jenis agglomerative.
Langkah-langkah HC agglomerative adalah sebagai berikut:
- Buat setiap data poin di dataset kita menjadi sebuah kluster, sehingga total kita memiliki N kluster. Artinya jika kita memiliki 800 data, maka kita memiliki 800 kluster juga (1 data = 1 kluster).
- Cari 2 kluster yang saling berdekatan satu dengan yang lain, dan jadikan 2 kluster terdekat ini menjadi 1 kluster. Dengan demikian, sekarang kita memiliki N-1 kluster.
- Cari 2 kluster yang sakling berdekatan dengan yang lain (termasuk dengan kluster yang baru saja dibuat di langkah 2 jika memang ia memiliki jarak terdekat dengan kluster lain), dan jadikan 2 kluster terdekat ini menjadi 1 kluster. Dengan demikian, sekarang kita memiliki N-2 kluster.
- Ulangi terus langkah ketiga, sampai kita hanya memiliki 1 kluster saja.
Mudah bukan? Jadi secara logika, kita hanya mencari 2 kluster dengan jarak terdekat, itu saja. Pertanyaannya sekarang, apa yang dimaksud dengan jarak terdekat?
Jarak yang dimaksud di sini adalah jarak euclidean, yang dijelaskan dengan formula sebagai berikut;
Jika dua kluster adalah berupa 2 titik (2 data poin) maka sangatlah mudah menghitung jarak euclidean-nya. Namun jika 2 kluster, di mana masing-masing kluster adalah kumpulan dari beberapa titik, maka ada 4 cara mendefinisikan jarak antara keduanya. Pembaca bisa memilih mana saja yang diinginkan, yaitu:
- Titik terdekat antara 2 kluster ini
- Titik terjauh antara 2 kluster ini
- Titik pusat antara 2 kluster ini
- Nilai rataan dari jarak antara masing-masing titik di 2 kluster ini
Berikut ilustrasi dari keempat pilihan di atas:
Untuk penjelasan dari jarak no 4 (nilai rataan antara masing-masing titik), maka kita menghitung jarak antara satu data poin (anggap a1), dengan satu data poin di kluster yang lain (anggap b1). Setelah itu kita hitung jarak antara a1 dengan b2, a1 dengan b3 dan seterusnya. Kemudian dilanjutkan dengan a2 dengan b1, a2 dengan b2 dan seterusnya. Jika sudah semua, maka langkah akhir adalah tinggal menghitung nilai rataannya.
Sekarang kita akan mulai proses pembentukan klusternya. Kita memiliki 6 buah data poin (untuk memudahkan pemahaman kita hanya memakai 6 data saja). Dengan memiliki 6 data poin, maka kita memiliki 6 kluster. Kita akan mendefinisikan jarak antara 2 kluster sebagai jarak uclidean terdekatnya. Ilustrasinya sebagai berikut:
Langkah selanjutnya adalah mencari lagi jarak terdekat dari dua kluster. Perlu diperhatikan bahwa 2 titik berwarna biru muda tadi (di langkah 1) sudah menjadi 1 kluster:
Dilanjutkan dengan langkah ketiga:
Dilanjutkan langkah keempat:
Langkah terakhir adalah menyatukan semuanya menjadi 1 kluster:
Sekarang kita sudah memiliki 1 kluster besar. Namun pertanyaannya, bukankah seharusnya kita membagi-bagi dataset ke dalam beberapa kluster? Mengapa kita hanya memiliki 1 kluster saja? Untuk menjawabnya kita perlu menggunakan teknik elbow method atau dengan dendrogram. Apa itu dendrogram?
Untuk melanjutkan membaca silakan klik halaman berikutnya di bawah ini.
Pak mau bertanya, jika di regression bisa pake MSE MAPE, klasifikasi pake confussion matrix dll, lalu apakah ada cara untuk mengecek keakuratan/keefektifan dari clustering?
Terima kasih
Untuk clustering bisa gunakan beberapa metrics seperti Davies-Bouldin Index, Dunn Index, dan Silhouette Coefficient.