K-Means Clustering
Ahmad Husain A
2 Februari 2018
Analisis Klaster
Analisis klaster / cluster analysis adalah suatu analisis statistik yang bertujuan memisahkan objek kedalam beberapa kelompok sifat berbeda antar kelompok yang satu dengan yang lain. Dalam analisis ini tiap kelompoknya nanti bersifat homogen antar anggota kelompoknya. (dikutip dari materi pak prayudho). Untuk penjelasan detailnya bisa di-googling ya!^^
K-Means
Nah pada kesempatan ini kita akan sama-sama belajar salah satu cabang analisis klaster yaitu K-means Clustering. Iya, sesuai namanya menggunakan kata ‘K’ artinya kita akan membentuk banyak klaster sebanyak K kelompok. K-means ini merupakan metode yang paling sederhana dan banyak digunakan untuk memisahkan dataset kedalam ‘k’ kelompok.
Load Package
library(tidyverse)
library(cluster) # Algoritma klastering
library(factoextra) # Algoritma klastering dan visualisasi
Data Preparation
Untuk melakukan analisis klaster dengan R, biasanya kriteria data yang harus dipersiapkan adalah sebagai berikut:
- Row atau baris sebagai nilai observasi, dan coloumn tau kolom sebagai variabel.
- Jika terdapat data missing harus di hilangkan terlebih dahulu.
- Data harus di standarisasi supaya satuan tiap variabel sama. Ketika nanti dilakukan profilisasi tiap klasternya data dikembalikan ke satuan semula.
Nah kali ini akan digunakan data USArrest
yang berisi data statistik penangkapan per 100.000 data penduduk untuk kasus assault, murder, dan rape pada tiap 50 negara bagian di US pada tahun 1973.
dataclus <- USArrests
str(dataclus)
## 'data.frame': 50 obs. of 4 variables:
## $ Murder : num 13.2 10 8.1 8.8 9 7.9 3.3 5.9 15.4 17.4 ...
## $ Assault : int 236 263 294 190 276 204 110 238 335 211 ...
## $ UrbanPop: int 58 48 80 50 91 78 77 72 80 60 ...
## $ Rape : num 21.2 44.5 31 19.5 40.6 38.7 11.1 15.8 31.9 25.8 ...
head(dataclus)
## Murder Assault UrbanPop Rape
## Alabama 13.2 236 58 21.2
## Alaska 10.0 263 48 44.5
## Arizona 8.1 294 80 31.0
## Arkansas 8.8 190 50 19.5
## California 9.0 276 91 40.6
## Colorado 7.9 204 78 38.7
dataclus1 <- na.omit(dataclus) #untuk menghilangkan data missing
summary(dataclus1)
## Murder Assault UrbanPop Rape
## Min. : 0.800 Min. : 45.0 Min. :32.00 Min. : 7.30
## 1st Qu.: 4.075 1st Qu.:109.0 1st Qu.:54.50 1st Qu.:15.07
## Median : 7.250 Median :159.0 Median :66.00 Median :20.10
## Mean : 7.788 Mean :170.8 Mean :65.54 Mean :21.23
## 3rd Qu.:11.250 3rd Qu.:249.0 3rd Qu.:77.75 3rd Qu.:26.18
## Max. :17.400 Max. :337.0 Max. :91.00 Max. :46.00
datafix <- scale(dataclus1) #standarisasi data
Mencari K Optimal Klaster
Pada K-means ini ada pertimbangan untuk dapat menentukan banyak k kelompok yang paling optimal. Pendekatan metode yang paling populer untuk membantu menentukan banyak k optimal adalah:
- Metode Elbow
- Metode Silhoette
- Gap Statistic
fviz_nbclust(datafix, kmeans, method = "wss") # metode elbow
metode elbow menggunakan nilai total wss (whitin sum square) sebagai penentu k optimalnya. Dari gambar keluaran diatas, garis mengalami patahan yang membentuk elbow atau siku pada saat k = 4. Maka dengan menggunakan metode ini diperoleh k optimal pada saat berada di k = 4. Untuk menjadi pembanding, dilakukan uji yang lainnya.
fviz_nbclust(datafix, kmeans, method = "silhouette") # metode silhouette
Pendekatan rata-rata nilai metode silhoutte untuk menduga kualitas dari klaster yang terbentuk. Semakin tinggi nilai rata-rata nya maka akan semakin baik. Berdasarkan hasil keluaran diatas dipeoleh banyak klaster optimal yang terbentuk pada k = 2. Sedangkan opsi keduanya pada k = 4. Karena nilai rata-rata ilhoutte pada k = 2 dan k = 4 merupakan yang tertinggi dari yang lain.
set.seed(123)
gap_stat <- clusGap(datafix, FUN = kmeans, nstart = 25,
K.max = 10, B = 50) # metode gap statistic
fviz_gap_stat(gap_stat)
Nilai B adalah jumlah banyaknya sampel. diperoleh hasil k = 4 adalah yang optimal untuk membentuk klaster. Sehingga jika dibandingkan dengan metode sebelumnya maka dapat ditarik keputusan nilai k yang optimal untuk membentuk klaster adalah 4.
Eksekusi K-Means
final <- kmeans(datafix, 4, nstart = 25)
print(final)
## K-means clustering with 4 clusters of sizes 13, 16, 13, 8
##
## Cluster means:
## Murder Assault UrbanPop Rape
## 1 -0.9615407 -1.1066010 -0.9301069 -0.96676331
## 2 -0.4894375 -0.3826001 0.5758298 -0.26165379
## 3 0.6950701 1.0394414 0.7226370 1.27693964
## 4 1.4118898 0.8743346 -0.8145211 0.01927104
##
## Clustering vector:
## Alabama Alaska Arizona Arkansas California
## 4 3 3 4 3
## Colorado Connecticut Delaware Florida Georgia
## 3 2 2 3 4
## Hawaii Idaho Illinois Indiana Iowa
## 2 1 3 2 1
## Kansas Kentucky Louisiana Maine Maryland
## 2 1 4 1 3
## Massachusetts Michigan Minnesota Mississippi Missouri
## 2 3 1 4 3
## Montana Nebraska Nevada New Hampshire New Jersey
## 1 1 3 1 2
## New Mexico New York North Carolina North Dakota Ohio
## 3 3 4 1 2
## Oklahoma Oregon Pennsylvania Rhode Island South Carolina
## 2 2 2 2 4
## South Dakota Tennessee Texas Utah Vermont
## 1 4 3 2 1
## Virginia Washington West Virginia Wisconsin Wyoming
## 2 2 1 1 2
##
## Within cluster sum of squares by cluster:
## [1] 11.952463 16.212213 19.922437 8.316061
## (between_SS / total_SS = 71.2 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss"
## [5] "tot.withinss" "betweenss" "size" "iter"
## [9] "ifault"
argumen nstart
erupakan banyak random set yang akan dipilih. sesuai dengan beberapa referensi terdahulu nilai nstart
yang kerap digunakan yaitu 25. Kemudian dari keluaran hasil k-means dengan k = 4 terbentuk klaster 1 sebanyak 13 negara bagian, klaster 2 sebanyak 16 negara bagian, klaster 3 sebanyak 13 negara bagian dan klaster 4 sebanyak 8 negara bagian. Untuk merepresentasikan karakteristik tiap klaster kita dapat menggunakan acuan nilai means tiap kelompok yang terbentuk. Namun sebelumnya kita perlu mengembalikan data yang tadi distandarisasi kedalam bentuk semula, berikut adalah perintahnya:
fviz_cluster(final, data = datafix)
USArrests %>%
mutate(Cluster = final$cluster) %>%
group_by(Cluster) %>%
summarise_all("mean")
## # A tibble: 4 x 5
## Cluster Murder Assault UrbanPop Rape
## <int> <dbl> <dbl> <dbl> <dbl>
## 1 1 3.60 78.5 52.1 12.2
## 2 2 5.66 139 73.9 18.8
## 3 3 10.8 257 76.0 33.2
## 4 4 13.9 244 53.8 21.4
Berdasarkan hasil diatas, maka dapat dilakukan profilisasi tiap kelompok yang terbentuk. Dimana pada klaster 1 merupakan daerah negara bagian yang memiliki tingkat pembunuhannya, penyerangan, dan pemerkosaan paling rendah dari klaster yg lain dengan nilai sebesar. Sedangkan klaster 3 menjadi yang tertinggi dalam hal kasus penyerangan dan pemerkosaannya. Kemudian pada klaster 4 merupakan negara bagian dengan kasus pembunuhan tertinggi.
Yap. sekian postingan kali ini. Mohon dikoreksi jika ada yang kurang tepat. kan masih sama-sama belajar hihi. Semoga sukses kawan semua!
Referensi
[1] https://uc-r.github.io/kmeans_clustering [2] https://prayudho.wordpress.com/2008/12/30/analisis-cluster/