Analisis Klaster
Analisis klaster adalah salah satu metode statistik yang bertujuan untuk memisahkan objek ke dalam beberapa klaster (kelompok data) yang mempunyai sifat:
- Objek memiliki karakteristik yang serupa dalam satu klaster
- Objek memiliki karakteristik berbeda antar klaster
K-Means
K-Means merupakan salah satu metode pengelompokan data nonhierarki (sekatan) yang berusaha mempartisi data yang ada ke dalam bentuk dua atau lebih kelompok. Metode ini mempartisi data ke dalam kelompok sehingga data berkarakteristik sama dimasukkan ke dalam satu kelompok yang sama dan data berkarakteristik berbeda dikelomokkan ke dalam kelompok yang lain.
Load Library
library(cluster) # Algoritma klastering
library(factoextra) # Algoritma klastering dan visualisasi
library(ggplot2)
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.
- Hilangkan missing pada data(jika ada data missing).
- karena data yang digunakan memiliki satuan dan rentang yang berbeda maka perlu dilakukan standarisasi data terlebih dahulu.
Input Data
Nah kali ini akan digunakan data Iris yang berisi data observasi 3 spesies anggrek dengan jumlah observasi tiap spesiesnya sebanyak 50 observasi.
<- iris[-5]
dataclus str(dataclus)
## 'data.frame': 150 obs. of 4 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 ...
head(dataclus)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1 5.1 3.5 1.4 0.2
## 2 4.9 3.0 1.4 0.2
## 3 4.7 3.2 1.3 0.2
## 4 4.6 3.1 1.5 0.2
## 5 5.0 3.6 1.4 0.2
## 6 5.4 3.9 1.7 0.4
Hilangkan Data Missing
<- na.omit(dataclus)
dataclus1 summary(dataclus1)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
## Median :5.800 Median :3.000 Median :4.350 Median :1.300
## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
Standarisasi Data
Data harus di standarisasi supaya satuan tiap variabel sama. Ketika nanti dilakukan profilisasi tiap klasternya data dikembalikan ke satuan semula.
<- scale(dataclus1) datafix
Mencari K Optimal Klaster
Pada K-means ini ada pertimbangan untuk dapat menentukan banyak k kelompok yang paling optimal. Ada metode pendekatan yang paling populer digunakan untuk membantu menentukan banyak K optimal diantaranya adalah
- Metode Elbow
- Metode Silhoette
Metode Elbow
library(ggplot2)
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
fviz_nbclust(datafix, kmeans, method = "wss")
Metode elbow menggunakan nilai total wss (whitin sum square) sebagai penentu k optimalnya. Dari gambar di atas, garis mengalami patahan yang membentuk elbow atau siku pada saat k=2. Maka dengan menggunakan metode ini diperoleh k optimal pada saat berada di k=2. untuk menjadi pembanding, dilakukan uji lainnya.
Metode Silhouette
Pendekatan rata-rata nilai metode *silhoutte untuk menduga kualitas dari klaster yang terbentuk.semakin tinggi nilai rata-ratanya maka akan semakin baik.
fviz_nbclust(datafix, kmeans, method = "silhouette")
Berdasarkan hasil data diatas diperoleh banyak klaster optimal yang
terbentuk pada k=2. dedangkan opsi keduanya pada k=4. Karena nilai
rata-rata *silhoutte pada k=2 dan k=4 merupakan yang tertinggi dari yang
lain.
Analisis Klaster
Analisis klaster di R dapat dilakukan dengan fungsi kmeans() dan menggunakan data yang telah distandardisasi.Dalam fungsi kmeans() terdapat parameter nstart yang digunakan untuk memberitahu fungsi berapa kali inisiasi awal yang pengguna inginkan.
<- kmeans(datafix, 2, nstart = 25)
final print(final)
## K-means clustering with 2 clusters of sizes 50, 100
##
## Cluster means:
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1 -1.0111914 0.8504137 -1.300630 -1.2507035
## 2 0.5055957 -0.4252069 0.650315 0.6253518
##
## Clustering vector:
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
## 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2
## 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
## 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
## 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
## 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
## 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## 141 142 143 144 145 146 147 148 149 150
## 2 2 2 2 2 2 2 2 2 2
##
## Within cluster sum of squares by cluster:
## [1] 47.35062 173.52867
## (between_SS / total_SS = 62.9 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
Output dari fungsi kmeans() terdiri atas beberapa informasi sebagai berikut :
- cluster : vector yang berisikan lokasi klaster tiap objek.
- centers : matriks yang berisikan centroid/rata-rata nilai tiap klaster.
- withinss: vektor yang berisikan simpangan tiap klaster yang terbentuk.
- tot.withinss : total dari simpangan tiap klaster yang terbentuk. Biasa digunakan untuk membuat Elbow Plot guna mengetahui banyak klaster yang sebaiknya dipilih.
- size : jumlah objek pada tiap klaster.
Menentukan nilai Centroid akhir K-Means untuk melihat karakteristik data
aggregate(datafix, by=list(cluster=final$cluster), mean)
## cluster Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1 1 -1.0111914 0.8504137 -1.300630 -1.2507035
## 2 2 0.5055957 -0.4252069 0.650315 0.6253518
Menggabungkan hasil cluster algoritma K-Means dengan data
<- cbind(datafix, cluster =final$cluster)
dd head(dd)
## Sepal.Length Sepal.Width Petal.Length Petal.Width cluster
## 1 -0.8976739 1.01560199 -1.335752 -1.311052 1
## 2 -1.1392005 -0.13153881 -1.335752 -1.311052 1
## 3 -1.3807271 0.32731751 -1.392399 -1.311052 1
## 4 -1.5014904 0.09788935 -1.279104 -1.311052 1
## 5 -1.0184372 1.24503015 -1.335752 -1.311052 1
## 6 -0.5353840 1.93331463 -1.165809 -1.048667 1
Melihat hasil cluster akhir pada
$cluster final
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
## 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2
## 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
## 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
## 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
## 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
## 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## 141 142 143 144 145 146 147 148 149 150
## 2 2 2 2 2 2 2 2 2 2
Membuat plot hasil cluster
$centers final
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1 -1.0111914 0.8504137 -1.300630 -1.2507035
## 2 0.5055957 -0.4252069 0.650315 0.6253518
fviz_cluster(final, data = datafix)