K-Medoids Clustering in R

MUTHIA DISHANUR IZZATI
4 min readJul 11, 2020

--

Assalamu’alaikum Warahmatullahi Wabarakatuh

Pada kesempatan ini, saya akan memberikan tutorial clustering menggunakan K-Medoids dengan R. Dimana K-Medoids ini adalah varian dari K-Means.

Apa yang dimaksud dengan K-Medoids?

K-Medoids atau Partitioning Around Method (PAM) adalah metode cluster non hirarki yang merupakan varian dari metode K-Means. Algoritma ini memiliki kemiripan dengan Algoritma K-Means Clustering, tetapi terdapat beberapa perbedaan utama. Pada Algoritma K-Means, nilai tengah dihitung dengan rata-rata (mean) dan perhitungan jarak dihitung dari data pada masing-masing mean, sedangkan pada algoritma ini, data akan digunakan sebagai nilai tengah/disebut dengan medoid, dan perhitungan jarak dihitung dari jarak antar masing-masing data.

Dibandingkan dengan K-Means, K-Medoids lebih kuat untuk mengatasi kebisingan (noise) dan pencilan (outlier) karena meminimalkan sejumlah dissimilarities berpasangan, bukan jumlah kuadrat jarak Euclidean (Jiawei & Kamber, 2006).

Implementasi K-Medoids

Berikut langkah-langkah bagaimana implementasi K-Medoids dengan bantuan R Studio:

  1. Buka software RStudio. Sebelumnya copy terlebih dahulu data di MS Excel, kemudian input data pada R menggunakan sintaks berikut
data.muthia1=read.delim(“clipboard”)
data.muthia1

Data tersebut terdiri dari 40 observasi dan 4 variabel. Variabel data tersebut yaitu kecamatan, populasi sapi potong, kerbau, dan kambing.

2. Melakukan sedikit perubahan pada data, yaitu menjadikan variabel kecamatan menjadi index dengan sintaks sebagai berikut.

index.muthia=data.muthia1[,c(2:4)]
rownames(index.muthia)=data.muthia1$KECAMATAN[1:40]
index.muthia

3. Install terlebih dahulu packages yang dibutuhkan. kemudian aktifkan packages menggunakan sintaks berikut.

install.packages(“car”)
install.packages(“fpc”)
install.packages(“tidyverse”)
install.packages(“cluster”)
install.packages(“factoextra”)
library(tidyverse)
library(cluster)
library(factoextra)

3. Melihat karakteristik data meliputi pemeriksaan missing value dan outlier.

summary(is.na(index.muthia)) #melihat missing value
boxplot(index.muthia) #melihat data outlier

Diperoleh output sebagai berikut:

Dapat diketahui bahwa data tersebut tidak mengandung missing value untuk setiap variabel numerik yang digunakan. Dan ternyata masing-masing variabel memiliki outlier, bahkan outlier dari variabel populasi kambing sangat jauh.

4. Untuk pengujian asumsi tidak terjadi multikolinearitas dilakukan dengan melihat nilai korelasi Pearson. Copy sintaks berikut untuk menampilkan matriks korelasinya.

library(car)
multikolinearitas<-cor(index.muthia)
multikolinearitas

Berdasarkan output matriks korelasi 3x3 pada gambar di atas, terlihat bahwa nilai korelasi antar variabel berada di bawah 0.5 sehingga dapat disimpulkan bahwa asumsi tidak terjadi multikolinearitas telah terpenuhi. Sehingga, variabel-variabel tersebut dapat digunakan untuk analisis cluster.

5. Selanjutnya kita tentukan jumlah k. Penentuan jumlah k, kita akan pakai saran dari metode Silhouette. Selain itu, K-Medoid ini juga memiliki sintaks khusus sebagai penentuan jumlah k dengan library fpc. Copy sintaks berikut pada lembar kerja R.

fviz_nbclust(index.muthia, pam, method = “silhouette”)library(fpc)
pamk.result <- pamk(index.muthia)
pamk.result$nc

Metode Silhouette menggunakan pendekatan nilai rata-rata untuk menduga kualitas dari cluster yang terbentuk. Semakin tinggi nilai rata-ratanya maka akan semakin baik. Berdasarkan saran dari metode Silhouette, diperoleh jumlah cluster optimum yang terbentuk adalah k = 2.
Hasil yang sama juga disarankan oleh pamk.result dengan library fpc.

6. Gunakan sintaks berikut untuk melakukan clustering. Dengan jumlah cluster sebanyak 2.

library(cluster)
pam.result <- pam(index.muthia,2)
print(pam.result)
pam.result$dissdf.cluster = data.frame(index.muthia,pam.result$cluster)
df.cluster

Dari output di atas dapat diketahui bahwa medoid atau observasi yang mewakili untuk menjadi titik tengah pada cluster 1 adalah observasi ke 20, sedangkan medoid yang digunakan pada cluster 2 adalah observasi ke 11.
Sehingga, observasi yang memiliki jarak terdekat dengan medoid suatu cluster akan masuk ke cluster tersebut.

7. Anggota masing-masing cluster juga dapat ditampilkan dengan menggunakan sintaks berikut.

table(pam.result$clustering, data.muthia1$KECAMATAN)

Kecamatan hasil cluster tersebut diurutkan sesuai abjad.

8. Untuk menampilkan plot visualisasi K-Medoids. Silahkan copy sintaks berikut pada lembar kerja R.

fviz_cluster(pam.result, data = index.muthia)

Pada gambar di atas dapat dilihat 2 warna berbeda yaitu merah (cluster 1), dan hijau (cluster 2). Tahapan K-Medoid belum selesai ya….

Selanjutnya dilakukan perhitungan rataan dari setiap cluster untuk mengetahui karakteristik/ciri khas masing-masing cluster.

9. Melakukan profilisasi terhadap masing-masing cluster yang terbentuk menggunakan sintaks berikut.

index.muthia %>%
mutate(Cluster = pam.result$cluster) %>%
group_by(Cluster) %>%
summarise_all(“mean”)

Dari output di atas, kita dapat mengetahui bahwa cluster 1 merupakan cluster dengan kecamatan yang memiliki jumlah populasi ternak yang tergolong tinggi, karena di setiap variabelnya cluster 1 ini memiliki rata-rata lebih tinggi daripada cluster 2. Sedangkan cluster 2 merupakan cluster dengan kecamatan yang memiliki populasi ternak yang tergolong rendah.

Demikian tutorial tentang clustering K-Medoids dengan R.

Semoga ilmunya bermanfaat. Aamiin😊

Wassalamu’alaikum Warahmatullahi Wabarakatuh

Referensi:

  1. Jiawei, H., & Kamber, M. (2006). Data Mining: Concept and Techniques Second Edition. Morgan Kaufmann.
  2. https://piptools.net/algoritma-k-medoids-clustering/
  3. https://towardsdatascience.com/k-medoids-clustering-on-iris-data-set-1931bf781e05

--

--