Belajar K Means menggunakan R

K Means Clustering adalah sebuah algoritma untuk membagi-bagi data menjadi beberapa klaster berdasarkan kemiripan sifat-sifatnya.

Cara kerja Kmeans membuat klaster di R:
  • Pertama-tama kita tentukan berapa klaster yang ingin dibuat, misalkan k. Nilai k ini bisa 2, 3, 4 dst. Kemudian data yang kita dapatkan akan dibagi-bagi menjadi k klaster.
  • Kedua, satu anggota akan dipilih secara acak menjadi wakil dari klaster pertama, kemudian dipilih lagi satu anggota yang lain sebagai wakil dari klaster kedua. Dan seterusnya sampai setiap klaster memiliki satu wakil. Wakil-wakil klaster ini disebut dengan centroid, karena memang letaknya dianggap sebagai titik central klaster. 
  • Kemudian baru dijalankan proses iterasi dalam 2 langkah:
    • Satu: Setiap data ditentukan masuk ke salah satu klaster berdasarkan centroid mana yang terdekat dengannya.
    • Dua: Hitung ulang centroid untuk tiap-tiap klaster
  • Iterasi tetap dijalankan sampai tidak ditemukan variasi klaster yang baru 
  • Hasilnya adalah sebuah model klaster



Kelebihan Kmeans

  • Cukup teliti karena bisa dilakukan berulang-ulang sampai kepada variasi klaster yang paling kecil.
  • Mudah untuk diimplementasikan.
  • Suatu data masih ada peluang pindah ke klaster yag lebih dekat sehingga masih bisa didapatkan model klaster yang lebih baik lagi. 

Kelemahan Kmeans

  • Karena penunjukkan centroid dilakukan secara acak, maka terkadang hasilnya bagus sekali, kadang bisa juga meleset. Untuk itu langkah-langkah di atas perlu diulang beberapa kali. Pada program R sudah disediakan parameter nstarter untuk kita dapat menentukan berapa kali langkah kerja kmeans diulang.
  • Karena sifatnya yang harus diualng-ulang maka untuk data yang sangat besar akan membutuhkan waktu proses yang lama sehingga kurang efisien. Tetapi, kalau memang tujuannya untuk mencari ketepatan prediksi dan mengabaikan waktu proses, ya nggak apa-apa diulang-ulang.

Tahap Eksplorasi Data


Untuk mempelajari cara kerja Kmeans, kali ini, kita mempergunakan dataset Iris yang sudah ada pada R. Dalam dataset ini, berisi data spesies bunga iris yang diukur dari panjang dan lebar bagian-bagian bunga iris yaitu sepal dan petal.

Mari kita lihat dataset ini. Ketik dan run pada program R berikut:
>library(datasets)
>head(iris)
Hasilnya:

Seperti yang sudah diberikan di atas, dataset iris merupakan sampel bunga iris dimana ada 4 variabel yang dipergunakan untuk mempelajari spesies bunga iris. Keempat variabel diukur dari panjang dan lebar bagian sepal dan panjang dan lebar bagian petal. Hanya ada 3 jenis spesies dalam datset ini yaitu setosa, versicolor, virginica. 

Dalam percobaan kali ini, kita hanya pergunakan 2 buah variabel yaitu Petal.Length (kolom ketiga) dan Petal.Width (kolom keempat) untuk memprediksi spesiesnya apa. Kmeans kita pergunakan untuk membuat 3 klaster sesuai banyaknya klaster bunga iris. Nanti hasil klaster Kmeans kita cocokkan dengan dataset iris untuk mengukur ketepatan algoritma Kmeans  dalam memisahkan spesies bunag iris ini.

Kemudian kita coba lihat lebih detil data bunga iris dengan visualisasi grafik plot yaitu ggplot pada library ggplot2 pada packages ggplot2. Ketik dan run pada program:
>install.packages("ggplot2") #jika belum ada
>library(ggplot2) #menggunakan library ggplot2
>ggplot(iris, aes(Petal.Length, Petal.Width, color = Species)) + geom_point()

Lihat pada bagian plots, akan tampil gambar berikut ini



Bagian yang berwarna merah adalah spesies setosa. Seperti terlihat pada gambar di atas, spesies ini terpisah jauh dari kedua spesies lainnya. Sehingga akan mdah dipisahkan menjadi satu klaster tersendiri. Antara spesies virginica dan versicolor terlihat beberapa titik terlalu berdekatan. Hal ini akan menjadi tantangan tersendiri untuk memisahkan kedua spesies tersebut 100%.  Ok kita pasang target 95% keberhasilan kita membuat klaster spesies bunga iris.


Klasterisasi Spesies Bunga Iris


Tadi kita sudah lihat datanya, sekarang kita coba untuk membuat klasternya. Karena proses awal klaster bersifat acak, kita tentukan seed (1234) dimana kita akan buat tiga klaster k=3, karena spesies bunga  iris memang ada 3 dengan hanya menggunakan variabel petal.length dan petal.width yang merupakan kolom ke 3 dan 4 di dataset iris.

>set.seed(1234)
>irisCluster <- kmeans(iris[, 3:4], 3, nstart = 20)
>irisCluster

Kita tentukan nstart = 20 artinya R akan melakukan proses klasterisasi Kmeans sebanyak 20x secara acak dan menghasilkan klaster dengan variasi terrendah.Kita dapat melihat centroid, data-data dalam klasterdan variasi klaster. 


Hasilnya:


Sekarang, mari kita bandingkan hasil klaster dengan data species bunga iris yang sesungguhnya. Ketik pada program run:
>table(irisCluster$cluster, iris$Species)

Hasilnya adalah sebuah confusion matrix:



Spesies setosa=cluster 1, species versicolor = cluster 2, dan spesiesvirginica=cluster 3. K means gagal memprediksi 2 versicolor, dan 4 virginica totsl 6 kesalahan. Sedangkan yang lainnya benar. yaitu 50+48+46=144. Jadi akurasi Kmeans adalah  144/(144+6)=96%. Berarti target kita tercapai.

Sekarang, mari kita visualisasi hasil klaster ini. Ketik dan run pada program:
irisCluster$cluster <- as.factor(irisCluster$cluster)
ggplot(iris, aes(Petal.Length, Petal.Width, color = irisCluster$cluster)) + geom_point()

Hasil klaster kita terlihat sbb:


No comments:

Post a Comment