KMeans untuk Pengklasteran dengan R

Metode pengklasteran merupakan salah satu metode pembelajaran mesin yang cukup matang dan paling umum digunakan dalam melakukan eksplorasi data. Tanpa mengetahui apapun mengenai data, kita dapat mengelompokkan data berdasarkan nilai masing-masing variabel. Salah satu algoritma yang digunakan adalah KMeans yang dalam R ada dalam paket stats.

Untuk menerapkan K-Means, ada beberapa hal yang perlu diperhatikan dalam menggunakan algoritma ini dengan R.

Argumen Fungsi KMeans

Berikut argumen yang diperlukan dalam menjalankan fungsi ini.

kmeans(x, centers, iter.max = 10, nstart = 1,
       algorithm = c("Hartigan-Wong", "Lloyd", "Forgy",
                     "MacQueen"), trace=FALSE)
## S3 method for class 'kmeans'
fitted(object, method = c("centers", "classes"), ...)

Dimana x adalah data yang ingin diklaster, centers adalah jumlah titik pusat, iter.max adalah jumlah maksimum pengulangan/iterasi, nstart adalah jumlah titik awal acak yang dibuat, algorithm adalah algoritma yang ingin dipakai, trace adalah opsi untuk informasi proses penghitungan.

Algoritma KMeans

Algoritma dasar kmeans adalah:

  1. Tentukan jumlah klaster (k), tetapkan pusat kluster secara acak;
  2. Alokasikan titik data ke dalam klaster secara acak;
  3. Hitung jarak setiap titik dengan pusat klaster;
  4. Alokasikan data ke dalam klaster dengan jarak terdekat dengan titik;
  5. Hitung pusat klaster yang baru dari klaster data yang telah terbentuk.

Langkah ke-3 sampai dengan ke-4 dilakukan berulang hingga tidak ada data yang berpindah klaster atau parameter maksimum iterasi tercapai.

Beberapa Masalah Terkait Pengklasteran dengan KMeans

Dalam menggunakan metode pengklasteran dengan kmeans ada beberapa hal yang perlu diperhatikan:

  • Ditemukan beberapa model algoritma yang berbeda utamanya penghitungan jarak;
  • Penentuan jumlah klaster yang tepat;
  • Kegagalan converge karena perpindahan antar klaster yang tidak berhenti;
  • Pendeteksian pencilan (outliers);
  • Bentuk klaster;
  • Overlapping dimana ada kemungkinan klaster di dalam klaster.

Contoh Penerapan KMeans

Pustaka

library(tidyverse)
library(cluster)

Set Data Contoh

Dalam contoh penerapan ini akan coba digunakan set data iris dimana data berisi kelompok data jenis bunga iris beserta karakternya. Dengan menggunakan karakter yang tersedia diharapkan dapat dikelompokkan bunga yang sejenis. Akurasi dapat diukur dari jumlah data yang tidak sesuai dengan kelompok aslinya.

Contoh Kode

# Load the iris dataset 
data(iris)

# Display the first few rows of the dataset
head(iris)

library(ggplot2)
# Create a scatter plot
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Petal.Length, size = Petal.Width, shape = Species)) +
geom_point() +
scale_color_gradient(low = "blue", high = "red") +
labs(title = "Iris Dataset: Four-Dimensional Visualization", x = "Sepal Length", y = "Sepal Width", color = "Petal Length", size = "Petal Width") +
theme_minimal()

# Apply k-means clustering with k = 3 (for the three species of Iris)
set.seed(20) # for reproducibility
iris_cluster <- kmeans(iris[, 1:4], centers = 3)

# Add the cluster assignments to the iris dataset
iris$Cluster <- as.factor(iris_cluster$cluster)

# Plot the clusters
library(ggplot2)
ggplot(iris, aes(Sepal.Length, Sepal.Width, color = Cluster)) +
geom_point() +
labs(title = "K-means Clustering of Iris Dataset")

# attach additional library for a confusion matrix
library(caret)

# relabeling
iris$ClusterGuessedName <- factor(iris$Cluster, labels = c("setosa", "versicolor", "virginica"))

# Create a confusion matrix
confusionMatrix(iris$ClusterGuessedName, iris$Species)

Tentunya contoh tersebut hanya sebagai gambaran bahwa fungsi kmeans dapat membagi kelompok menjadi 3 (tiga), walaupun perlu ada evaluasi terhadap kondisi riil dimana pembagian tidak tepat. Ketidaktepatan terjadi tidak jauh dari permasalahan mendasar algoritma kmeans sendiri yang telah disebutkan di atas. Namun untuk menuju pengembangan algoritma berikutnya, sangat perlu mengetahui dasar permasalahan algoritma ini.

Leave a Reply

Your email address will not be published. Required fields are marked *