Pengertian Analisis Cluster

Clustering adalah sebuah proses untuk mengelompokan data ke dalam beberapa cluster atau kelompok sehingga data dalam satu cluster memiliki tingkat kemiripan yang maksimum dan data antar cluster memiliki kemiripan yang minimum.(Tan, 2006).Cluster-cluster yang terbentuk dalam satu cluster mempunyai ciri yang relatif sama (homogen), sedangkan antar cluster mempunyari ciri yang berbeda (heterogen). Pengelompokan ini dilakukan berdasarkan variabel-variabel yang diamati (Usman dan Sobari, 2013).

Algoritma K-Means

K-means merupakan algoritma yang menetapkan nilai-nilai cluster (k) secara random, untuk sementara nilai tersebut menjadi pusat dari cluster yang biasa disebut centroid. (Vulandari,2017).Data-data yang dipilih menjadi beberapa kelompok dengan kriteria yang telah ditentukan lalu dikumpulkan menjadi satu dalam sebuah cluster,dimana setiap cluster ini memiliki centroid atau pusat.(Suntoro,2019).Definisi K-Means adalah suatu metode penganalisaan data atau metode Data Mining yang melakukan proses pemodelan tanpa supervisi(supervised)dan merupakan salah satu metode yang melakukan pengelompokan dengan sistem partisi.Kesimpulan makna dari K-means yaitu K-Means merupakan algoritma untuk cluster n objek berdasarkan atribut menjadi k partisi , dimana k<n.Berikut ini tahapan dari algoritma K-Means:

  1. Tentukan jumlah kelompok.
  2. Alokasikan data ke dalam kelompok secara acak.
  3. Hitung pusat kelompok(centroid/rata-rata) dari data yang ada di masing-masing kelompok.
  4. Alokasikan masing-masing data ke centroid/rata-rata terdekat.
  5. Kembali ke langkah 3,apabila masih ada yang berpindah kelompok , atauu apabila ada perubahan nilai centroid di atas nilai ambang yang ditentukan , atau apabila perubahan nilai pada fungsi objektif yang digunakan masih diatas nilai ambang yang ditentukan.

Eksperimen Algoritma K-Means

library(ggplot2)

str(iris)
## 'data.frame':    150 obs. of  5 variables:
##  $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
##  $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
##  $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
##  $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
##  $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
sep.l <- iris$Sepal.Length
sep.w <- iris$Sepal.Width
pet.l <- iris$Petal.Length
pet.w <- iris$Petal.Width
head(iris)

Melakukan K-Means Clustering

set.seed(100)
irisCluster <- kmeans(iris[,1:4], center=3, nstart=20)
irisCluster
## K-means clustering with 3 clusters of sizes 62, 38, 50
## 
## Cluster means:
##   Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1     5.901613    2.748387     4.393548    1.433871
## 2     6.850000    3.073684     5.742105    2.071053
## 3     5.006000    3.428000     1.462000    0.246000
## 
## Clustering vector:
##   [1] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
##  [38] 3 3 3 3 3 3 3 3 3 3 3 3 3 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
##  [75] 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 2 2 2 2 1 2 2 2 2
## [112] 2 2 1 1 2 2 2 2 1 2 1 2 1 2 2 1 1 2 2 2 2 2 1 2 2 2 2 1 2 2 2 1 2 2 2 1 2
## [149] 2 1
## 
## Within cluster sum of squares by cluster:
## [1] 39.82097 23.87947 15.15100
##  (between_SS / total_SS =  88.4 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"

Mencari Nilai Ideal Untuk K

tot.withinss <- vector(mode="character", length=10)

for (i in 1:10){
  irisCluster <- kmeans(iris[,1:4], center=i, nstart=20)
  tot.withinss[i] <- irisCluster$tot.withinss
}

Menentukan banyaknya k

1. Metode Elbow

library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
fviz_nbclust(iris[1:4], kmeans, method='wss')

2. Metode Silhoutte

fviz_nbclust(iris[1:4], kmeans, method='silhouette')

withinss untuk nilai k yang berbeda

plot(1:10, tot.withinss, type="b", pch=19)

Membandingkan Cluster Yang Diprediksi Dengan Data Asli.

irisCluster <- kmeans(iris[,1:4], center=3, nstart=20)
table(irisCluster$cluster, iris$Species)
##    
##     setosa versicolor virginica
##   1     50          0         0
##   2      0         48        14
##   3      0          2        36

Memplot Cluster Yang Diprediksi

library(cluster)
clusplot(iris, irisCluster$cluster, color=T, shade=T, labels=0, lines=0)

plot(iris)

data.frame(iris)