Pendahuluan
Tujuan analisis klasifikasi adalah untuk menentukan keanggotaan grup/kelompok dari suatu individu. Dalam analisis klasifikasi terdapat dua metode yaitu:
Unsupervised, tidak terdapat informasi mengenai kelompok/grup dari amatan pada data yang digunakan. Analisis dilakukan untuk menentukan keanggotaan grup dati amatan tersebut. Sering juga dikenal sebagai analisis gerombol (clustering, cluster analysis).
Supervised, data memiliki informasi mengenai kelompok/grup sesungguhnya dari amatan. Analisis dilakukan untuk menentukan pembeda antargrup, dan aturan pembeda tersebut dapat dimanfaatkan untuk menentukan keanggotaan dari amatan lain yang tidak ada dalam data.
Dalam beberapa hal, tujuan suatu penelitian adalah untuk mengelompokkan individu-individu berdasarkan banyak peubah penciri. Individu-individu dalam satu kelompok memiliki kemiripan atau keragaman yang kecil dibandingkan individu-individu di kelompok yang berbeda.
Analisis gerombol merupakan metode yang dapat menggabungkan beberapa individu ke dalam kelompok-kelompok berdasarkan sifat kemiripan atau sifat ketidakmiripan antar objek, sehingga objek dalam kelompok lebih mirip dibandingkan dengan objek antar kelompok.
Hasil dari analisis gerombol adalah sejumlah kelompok, di mana setiap kelompok berbeda satu sama lain, dan objek atau titik data dalam setiap kelompok cenderung mirip satu sama lain.
Tujuan dari analisis gerombol adalah untuk membantu mengungkap pola dan struktur dalam dataset yang mungkin memberikan wawasan tentang hubungan dan asosiasi yang mendasarinya.
Penerapan
Analisis klaster/gerombol dapat diterapkan dalam:
Segmentasi, contohnya segmentasi pelanggan menjadi beberapa kelompok dengan pola demografis atau perilaku pembelian yang mirip. Hal ini dapat dimanfaatkan untuk marketing campaign atau analisis yang lebih detail pada subgroup tertentu.
Deteksi suatu anomali pada data, misalnya pencilan, atau pengamatan dengan perilaku yang tidak biasa, seperti transaksi keuangan yang curang, pola tidak biasa dalam lalu lintas jaringan, atau data medis yang berbeda dari yang lainnya.
Penyederhanaan gugus data yang amat sangat besar sekali, dengan mengelompokkan sejumlah besar fitur yang mirip menjadi beberapa kategori yang homogen dan ukurannya jauh lebih sedikit.
Image Processing, digunakan untuk mengelompokkan piksel dengan properti serupa, sehingga memungkinkan identifikasi objek dan pola dalam gambar.
Biology and Medicine, digunakan untuk mengidentifikasi gen yang terkait dengan penyakit tertentu atau mengelompokkan pasien dengan karakterisik klinis serupa. Ini dapat membantu dalam diagnosis dan pengobatan penyakit.
Social Network Analysis, digunakan untuk mengelompokkan individu dengan koneksi sosial dan karakteristik serupa, sehingga memungkinkan identifikasi subkelompok dalam jaringan yang lebih besar.
Jenis Clustering
Terdapat beberapa jenis clustering yang umum digunakan dalam analisis data, termasuk:
-
Hierarchical Clustering (Clustering Hirarki):
Metode ini mengelompokkan data ke dalam struktur hirarki berupa pohon atau dendrogram.
Terdapat dua jenis utama dari hierarchical clustering: agglomerative (pemusatan) dan divisive (pemisahan).
Agglomerative clustering dimulai dengan setiap data sebagai cluster tunggal, kemudian menggabungkan cluster secara berurutan hingga satu kelompok besar terbentuk.
Divisive clustering dimulai dengan satu kelompok besar, lalu memisahkan kelompok tersebut menjadi kelompok-kelompok yang lebih kecil.
-
Partitional Clustering (Clustering Partisi):
Metode ini membagi data ke dalam sejumlah kelompok tanpa struktur hirarki.
Salah satu algoritma partitional clustering yang terkenal adalah K-Means, yang membagi data menjadi K kelompok yang disebut cluster.
Algoritma K-Means mencoba untuk meminimalkan jarak antara titik data dengan pusat kelompok (centroid) yang sesuai.
-
Density-Based Clustering (Clustering Berbasis Kepadatan):
Jenis clustering ini mengidentifikasi kelompok berdasarkan kerapatan data dalam ruang atribut.
DBSCAN (Density-Based Spatial Clustering of Applications with Noise) adalah salah satu algoritma density-based yang populer. Algoritma ini mengelompokkan data berdasarkan kerapatan titik data dan mampu menangani noise (data yang tidak masuk ke dalam kelompok tertentu).
-
Model-Based Clustering (Clustering Berbasis Model):
Metode ini memodelkan data dalam setiap kelompok dengan distribusi statistik tertentu.
GMM (Gaussian Mixture Model) adalah salah satu contoh model-based clustering yang menganggap data di setiap kelompok sebagai distribusi Gaussian.
Algoritma EM (Expectation-Maximization) sering digunakan untuk mengestimasi parameter distribusi dalam GMM.
-
Centroid-Based Clustering (Clustering Berbasis Pusat):
Algoritma dalam kategori ini mengelompokkan data berdasarkan pusat-pusat kelompok (centroid) yang mewakili kelompok tersebut.
Selain K-Means, algoritma Fuzzy C-Means (FCM) juga termasuk dalam jenis ini, yang memungkinkan titik data untuk memiliki tingkat keanggotaan yang berbeda pada setiap kelompok.
-
Graph-Based Clustering (Clustering Berbasis Grafik):
Jenis clustering ini memodelkan data sebagai grafik dan mengidentifikasi kelompok berdasarkan struktur grafik tersebut.
Contohnya adalah Spectral Clustering yang menggunakan matriks laplacian dari grafik data untuk mengelompokkan data.
-
Birch Clustering (Clustering Birch):
- Algoritma ini cocok untuk data berdimensi tinggi dan dapat menghasilkan pohon BIRCH (Balanced Iterative Reducing and Clustering using Hierarchies) yang kompak untuk merepresentasikan data.
Pilihan jenis clustering yang tepat tergantung pada sifat data dan tujuan analisis. Setiap jenis clustering memiliki kelebihan dan kelemahan sendiri, sehingga pemilihan algoritma yang sesuai sangat penting untuk memenuhi kebutuhan analisis data.
Kelebihan dan Kekurangan
Cluster analysis memiliki kelebihan dan kekurangan:
Kelebihan Cluster Analysis:
Penemuan Pola Tersembunyi: Cluster analysis dapat membantu dalam menemukan pola tersembunyi dalam data yang mungkin sulit dilihat dengan mata telanjang. Ini dapat membantu dalam pengambilan keputusan yang lebih baik.
Segmentasi Pelanggan: Dalam konteks bisnis, cluster analysis sering digunakan untuk memahami pelanggan dengan lebih baik. Ini memungkinkan perusahaan untuk mengidentifikasi segmen pelanggan yang berbeda dan menyusun strategi pemasaran yang lebih efektif.
Simplifikasi Data: Dengan mengelompokkan data menjadi kelompok-kelompok, cluster analysis dapat mengurangi kompleksitas data, sehingga memudahkan pemahaman dan analisis.
Validasi Hipotesis: Cluster analysis dapat digunakan untuk menguji hipotesis tertentu atau mengonfirmasi asumsi-asumsi yang dibuat tentang data.
Mengidentifikasi Anomali: Cluster analysis dapat membantu mengidentifikasi data yang tidak biasa atau anomali yang mungkin perlu perhatian khusus.
Kekurangan Cluster Analysis:
Sensitif Terhadap Inisialisasi: Beberapa algoritma clustering seperti K-Means sangat sensitif terhadap inisialisasi awal centroid, yang dapat menghasilkan hasil yang berbeda jika inisialisasi berbeda.
Tidak Ada Jawaban yang Benar: Cluster analysis adalah proses berbasis pemodelan dan interpretasi, dan tidak ada jawaban yang benar atau salah. Hasil cluster analysis dapat bervariasi tergantung pada pemilihan metode, parameter, atau inisialisasi yang digunakan.
Data Multidimensi: Cluster analysis dapat menjadi lebih sulit untuk data dengan dimensi yang tinggi karena konsep jarak atau kesamaan menjadi lebih abstrak dalam ruang berdimensi tinggi.
Outlier Sensitif: Beberapa algoritma clustering dapat sangat sensitif terhadap outlier, yang dapat mengganggu pembentukan kelompok yang sebenarnya.
Dapat Overfitting: Dalam analisis klaster, overfitting merujuk pada fenomena di mana algoritma klaster menciptakan klaster yang terlalu kompleks atau rumit, menyesuaikan kebisingan atau karakteristik khas data daripada menangkap pola atau struktur yang mendasarinya. Overfitting dapat terjadi ketika algoritma memiliki terlalu banyak fleksibilitas atau ketika jumlah klaster terlalu besar dibandingkan dengan struktur intrinsik data.
Dapat Underfitting: Dalam analisis klaster underfitting terjadi ketika algoritma atau pengaturan yang dipilih terlalu kaku atau sederhana untuk menangkap kompleksitas data.
Pilihan Metode yang Sulit: Memilih metode clustering yang tepat dan menentukan jumlah cluster yang sesuai dapat menjadi tantangan yang sulit. Kesalahan dalam pemilihan metode atau jumlah cluster dapat menghasilkan hasil yang tidak relevan.
Interpretasi Subjektif: Interpretasi hasil cluster analysis sering kali subjektif, dan hasil yang ditemukan tergantung pada pemahaman dan penafsiran analis.
Ketergantungan Terhadap Data Awal: Cluster analysis sangat tergantung pada kualitas data yang digunakan. Data yang buruk atau tidak sesuai dapat menghasilkan hasil clustering yang tidak akurat.
Sementara cluster analysis dapat memberikan wawasan berharga dalam pemahaman data, penting untuk mempertimbangkan kelebihan dan kekurangannya serta menjalankan analisis dengan hati-hati, termasuk validasi hasil dan pemilihan metode yang sesuai untuk tujuan analisis tertentu.
Teknik Penggerombolan
Konsep Jarak
Objek yang berada pada gerombol yang sama memiliki kemiripan yang lebih besar dibandingkan objek yang ada dalam gerombol lainnya. Kemiripan/ketakmiripan antar objek dalam analisis gerombol menggunakan konsep jarak.
Jarak merupakan konsep inti dari proses cluster analysis. Jarak sering juga disejajarkan dengan istilah dissimilarity.
Jarak antar 2 objek a dan b dinotasikan dengan d(a,b), di mana:
d(a,b) >= 0
d(a,a) = 0
d(a,b) = d(b,a)
d(a,b) meningkat seiring semakin tidak mirip kedua objek a dan b
d(a,c) <= d(a,b) + d(b,c)
Asumsi: semua pengukuran bersifat numerik.
Terdapat bermacam-macam formula/defisini penghitungan jarak, yaitu: Euclidean, Weighted Euclidean, Mahalanobis, City block, Jaccard, Hamming, dll.
Memilih metrik jarak yang sesuai adalah langkah penting dalam analisis klaster karena menentukan bagaimana kemiripan atau ketidakmiripan dihitung antara titik data. Pemilihan metrik jarak harus sesuai dengan karakteristik data dan tujuan analisis klaster. Berikut beberapa panduan yang perlu dipertimbangkan saat memilih metrik jarak untuk analisis klaster:
Pahami sifat data: Pertimbangkan jenis data yang akan digunakan. Apakah itu data numerik, kategorikal, biner, atau campuran dari berbagai jenis? Metrik jarak yang berbeda cocok untuk berbagai jenis data.
Jarak Euclidean: sering digunakan untuk data yang bersifat kontinu atau numerik. Ini mengukur jarak lurus antara dua titik dalam ruang Euclidean. Ini mengasumsikan bahwa semua variabel memiliki bobot yang sama dan berada pada skala yang sama. Jarak Euclidean banyak digunakan dalam algoritma seperti k-means dan klaster hierarki.
Jarak Manhattan: juga dikenal sebagai jarak block kota atau jarak L1, menghitung jumlah perbedaan absolut antara koordinat dua titik. Ini cocok untuk data numerik ketika variabel memiliki skala yang berbeda atau mewakili unit yang berbeda. Jarak Manhattan tahan terhadap pencilan dan digunakan dalam algoritma klaster seperti k-medians.
Jarak Minkowski: metrik jarak yang umum yang mencakup kedua jarak Euclidean dan Manhattan sebagai kasus khusus. Ini didefinisikan sebagai akar pangkat n dari jumlah nilai absolut yang dinaikkan ke pangkat n. Dengan mengubah nilai parameter “n,” berbagai metrik jarak dapat diperoleh. Ketika n=1, ini setara dengan jarak Manhattan, dan ketika n=2, ini setara dengan jarak Euclidean.
Jarak Hamming: cocok untuk data kategorikal atau biner. Ini mengukur jumlah posisi di mana dua string dengan panjang yang sama berbeda. Ini sering digunakan untuk tugas pengelompokan yang melibatkan data teks, urutan DNA, atau vektor fitur biner.
Jarak Jaccard: digunakan untuk mengukur ketidakmiripan antara himpunan. Ini sering digunakan untuk data biner atau kategorikal di mana kehadiran atau ketiadaan item menjadi perhatian. Jarak Jaccard didefinisikan sebagai rasio perbedaan ukuran dari irisan dan gabungan dua himpunan. Ini sering digunakan dalam tugas pengelompokan seperti pengelompokan dokumen teks atau sistem rekomendasi berbasis item.
Prosedur Clustering
Dalam clustering (penggerombolan) terdapat dua prosedur yaitu:
- Hierarchical Clustering
- Aglomeratif (dimulai dari n gerombol menjadi 1 gerombol)
- Divisif (dimulai dari 1 gerombol menjadi n gerombol)
- Banyaknya gerombol yang akan dihasilkan belum diketahui.
- Banyaknya gerombol ditentukan berdasarkan dendogram.
- Aglomeratif (dimulai dari n gerombol menjadi 1 gerombol)
- Non-hierarchical Clustering
- Banyaknya gerombol yang ingin dibentuk sudah diketahui sejak awal.
Hierarchical Clustering
Agglomeratif
Setiap n pengamatan dianggap merupakah gerombol terpisah
Setiap dua gerombol yang mirip berdasarkan aturan jarak digabungkan, sehingga pada tahap ke-1 akan terdapat n-1 gerombol.
Pada tahap ke-2, gerombol lain digabungkan sehingga terbentuk n-2 gerombol, dan seterusnya.
Terapat penggabungan pada setiap tahap sampai akhirnya seluruh pengamatan tergabung ke dalam satu gerombol pada tahap terakhir.
Divisif
Seluruh pengamatan dianggap sebagai satu gerombol.
Pengamatan yang dianggap paling berbeda akan dikeluarkan menjadi gerombol terpisah.
Pada tahap ke-1 akan terdapat dua gerombol, pada tahap ke-2 akan terdapat tiga gerombol, dan seterusnya, hingga pada tahap terakhir akan terbentuk sejumlah n gerombol, sama dengan banyaknya pengamatan.
Banyaknya gerombol menentukan kapan algoritma akan berhenti.
Metode Hierarchical Clustering
Ada beberapa metode yang dapat digunakan untuk menggabungkan cluster berhierarki, yaitu:
-
Pautan Tunggal (Single Linkage, Nearest Neighbor)
Jarak antar dua gerombol diukur dengan jarak terdekat antara sebuah objek dalam gerombol yang satu dengan sebuah objek dalam gerombol yang lain.h(Br, Bs) = min { d(xi, xj); xi anggota Br, dan xj anggota Bs }
-
Pautan Lengkap (Complete Linkage, Farthest Neighbor)
Jarak antar dua gerombol diukur dengan jarak terjauh antara sebuah objek dalam gerombol yang satu dengan sebuah objek dalam gerombol yang lain.h(Br, Bs) = max { d(xi, xj); xi anggota Br, dan xj anggota Bs }
-
Pautan Centroid (Centroid Linkage)
Jarak antara dua buah gerombol diukur sebagai jarak Euclidean antara kedua rataan (centroid) gerombol.Jika \(\overline{X_r}\) dan \(\overline{X_s}\) adalah vektor rataan (centroid) dari gerombol Br dan Bs, maka jarak kedua gerombol tersebut didefinisikan sebagai : \[ h(B_r,B_s)=d(\overline{X_r},\overline{X_s}) \] Centroid cluster yang baru didefinisikan sebagai: \[ \frac{n_r \overline{X_r}+n_r \overline{X_s}}{n_r+n_s} \]
-
Pautan Median (Median Linkage)
Jarak antar gerombol didefinisikan sebagai jarak antar median, dan gerombol-gerombol dengan jarak terkecil akan digabungkan.Median untuk gerombol yang baru adalah: \[ Mbaru = \frac{m_r+m_s}{2} \]
-
Pautan Rataan (Average Linkage)
Jarak antara dua buah gerombol, Br dan Bs didefinisikan sebagai rataan dari nr ns jarak yang dihitung antara xi anggota Br dan xj anggota Bs.
Complete, average, dan centroid adalah jenis yang paling populer dalam hierarki klaster, karena single linkage cenderung menghasilkan dendrogram yang tidak seimbang. Perlu dicatat bahwa dendrogram yang dihasilkan sangat tergantung pada jenis linkage yang digunakan.
Ilustrasi
Aplikasi pada data pemegang kartu ATM
Data menggunakan data transaksi.csv.
Setiap pemegang kartu ATM dari suatu memperoleh fasilitas berikut:
Melakukan transaksi tunai di mesin ATM.
Melakukan transaksi non-tunai di mesin ATM.
Melakukan transaksi melalui layanan internet banking.
Melakukan debit untuk keperluan belanja di berbagai merchants,
Tersedia data sampel 8000 customer dari bank tersebut yang berisi informasi mengenai frekuensi empat jenis transaksi di atas dalam satu bulan terakhir dan beberapa informasi dasar mengenai nasabah (usia, jenis kelamin, rata-rata saldo harian).
Terkni Clustering 1 Variabel
#Visualisasi: dotplot
nasabah <- read.csv('transaksi.csv')
nasabah20 <- nasabah [1:20,]
stripchart(nasabah20$saldoharian,"stack",pch=19,cex=1)
Metode: Equal intervals, mean-standard deviation, quantiles, maximum breaks, dan natural breaks (jenks).
Teknik Clustering 2 Variabel
#install.packages("classInt")
library(classInt)
## Warning: package 'classInt' was built under R version 4.2.3
partisi1 <- classIntervals(nasabah20$saldoharian)
partisi2 <- classIntervals(nasabah20$saldoharian,n=4,style="jenks")
nasabah20$cl1<-findCols(partisi1)
nasabah20$cl2<-findCols(partisi2)
plot(nasabah20$saldoharian,nasabah20$tunaiATM,pch=19,cex=1,ylab="ATM",xlab="Saldo",col=2)
plot(nasabah20$saldoharian,nasabah20$tunaiATM,type="n",ylab="ATM",xlab="Saldo")
text(nasabah20$saldoharian,nasabah20$tunaiATM,nasabah20$nasabah,cex=0.7)
head(nasabah20)
Euclidean Distance
jarak1 <- dist(nasabah20[,-1])
as.matrix(jarak1)
## 1 2 3 4 5 6 7
## 1 0.000000 4.360307 3.613629 4.472263 3.464181 3.003973 5.002034
## 2 4.360307 0.000000 4.692236 4.123826 3.608047 4.906154 4.697257
## 3 3.613629 4.692236 0.000000 2.245701 2.658976 3.762547 4.259994
## 4 4.472263 4.123826 2.245701 0.000000 1.415365 4.127396 3.321309
## 5 3.464181 3.608047 2.658976 1.415365 0.000000 3.319213 3.002369
## 6 3.003973 4.906154 3.762547 4.127396 3.319213 0.000000 3.464122
## 7 5.002034 4.697257 4.259994 3.321309 3.002369 3.464122 0.000000
## 8 9.397604 7.311059 9.779791 8.622872 8.141821 8.553681 6.570784
## 9 3.747778 3.607031 4.358985 5.102210 4.696424 5.013564 5.396968
## 10 13.082774 9.912597 13.653199 12.295811 11.880272 13.193167 11.491979
## 11 9.486969 6.403405 9.329328 8.485299 8.366929 9.541600 7.812645
## 12 15.277273 12.773226 14.355616 12.713132 12.854483 13.905978 11.200554
## 13 4.902800 4.805476 5.214328 4.006448 3.166851 3.873180 3.000431
## 14 3.874676 4.904157 3.758554 3.608596 3.001384 1.414777 2.828567
## 15 15.476366 13.175038 14.589998 12.799956 12.934316 14.390136 11.965974
## 16 3.619544 4.005361 2.450683 3.616739 3.621673 3.496164 4.495792
## 17 16.142760 13.947409 15.088821 13.523036 13.725636 14.707723 12.182472
## 18 9.489621 7.008292 9.339289 8.128318 7.876719 8.426489 6.245609
## 19 4.582644 4.244812 3.173482 2.236837 2.236069 3.466521 3.164467
## 20 2.836827 3.874471 3.605627 4.902450 4.478653 3.890864 5.579441
## 8 9 10 11 12 13 14
## 1 9.397604 3.747778 13.082774 9.486969 15.277273 4.902800 3.874676
## 2 7.311059 3.607031 9.912597 6.403405 12.773226 4.805476 4.904157
## 3 9.779791 4.358985 13.653199 9.329328 14.355616 5.214328 3.758554
## 4 8.622872 5.102210 12.295811 8.485299 12.713132 4.006448 3.608596
## 5 8.141821 4.696424 11.880272 8.366929 12.854483 3.166851 3.001384
## 6 8.553681 5.013564 13.193167 9.541600 13.905978 3.873180 1.414777
## 7 6.570784 5.396968 11.491979 7.812645 11.200554 3.000431 2.828567
## 8 0.000000 8.037482 6.405186 4.513820 7.478043 7.624644 8.437982
## 9 8.037482 0.000000 11.286077 6.784295 13.960172 6.337677 5.577453
## 10 6.405186 11.286077 0.000000 5.762124 9.266187 11.706498 13.117956
## 11 4.513820 6.784295 5.762124 0.000000 9.259627 9.058681 9.540824
## 12 7.478043 13.960172 9.266187 9.259627 0.000000 12.333940 13.327982
## 13 7.624644 6.337677 11.706498 9.058681 12.333940 0.000000 3.001040
## 14 8.437982 5.577453 13.117956 9.540824 13.327982 3.001040 0.000000
## 15 9.407798 14.683179 9.944490 10.770456 4.782879 12.795266 13.908425
## 16 9.683643 4.124413 13.583579 9.223414 14.718791 5.221264 3.490992
## 17 8.955242 14.981001 10.695952 10.630968 2.769386 13.527861 14.235215
## 18 2.027235 7.886523 6.857730 4.251925 7.063639 7.615861 8.186168
## 19 8.202900 5.572894 12.253150 8.544340 12.499088 4.362157 3.163545
## 20 9.413150 2.449493 12.937562 8.603953 15.195901 6.178144 4.594634
## 15 16 17 18 19 20
## 1 15.476366 3.619544 16.142760 9.489621 4.582644 2.836827
## 2 13.175038 4.005361 13.947409 7.008292 4.244812 3.874471
## 3 14.589998 2.450683 15.088821 9.339289 3.173482 3.605627
## 4 12.799956 3.616739 13.523036 8.128318 2.236837 4.902450
## 5 12.934316 3.621673 13.725636 7.876719 2.236069 4.478653
## 6 14.390136 3.496164 14.707723 8.426489 3.466521 3.890864
## 7 11.965974 4.495792 12.182472 6.245609 3.164467 5.579441
## 8 9.407798 9.683643 8.955242 2.027235 8.202900 9.413150
## 9 14.683179 4.124413 14.981001 7.886523 5.572894 2.449493
## 10 9.944490 13.583579 10.695952 6.857730 12.253150 12.937562
## 11 10.770456 9.223414 10.630968 4.251925 8.544340 8.603953
## 12 4.782879 14.718791 2.769386 7.063639 12.499088 15.195901
## 13 12.795266 5.221264 13.527861 7.615861 4.362157 6.178144
## 14 13.908425 3.490992 14.235215 8.186168 3.163545 4.594634
## 15 0.000000 15.350460 3.782071 9.021515 12.581005 15.799868
## 16 15.350460 0.000000 15.695756 9.235815 3.757338 2.647633
## 17 3.782071 15.695756 0.000000 8.527145 13.167384 16.138960
## 18 9.021515 9.235815 8.527145 0.000000 7.683883 9.176103
## 19 12.581005 3.757338 13.167384 7.683883 0.000000 5.005906
## 20 15.799868 2.647633 16.138960 9.176103 5.005906 0.000000
jarak2 <- dist(nasabah20[,-1],method="manhattan")
as.matrix(jarak2)
## 1 2 3 4 5 6 7
## 1 0.000000 11.110788 5.241484 8.033701 6.023384 7.154443 11.142638
## 2 11.110788 0.000000 12.130697 9.077087 9.134172 12.265230 12.253426
## 3 5.241484 12.130697 0.000000 5.207783 5.264868 8.395927 10.384122
## 4 8.033701 9.077087 5.207783 0.000000 2.057085 11.188144 7.176339
## 5 6.023384 9.134172 5.264868 2.057085 0.000000 9.131059 7.119254
## 6 7.154443 12.265230 8.395927 11.188144 9.131059 0.000000 8.011805
## 7 11.142638 12.253426 10.384122 7.176339 7.119254 8.011805 0.000000
## 8 20.561207 17.671995 19.802691 18.594908 16.537823 15.406764 11.418569
## 9 6.214106 9.103318 7.027379 10.180405 10.237489 11.368548 11.356744
## 10 25.398709 18.509496 28.640193 25.432409 23.375325 24.244266 22.256070
## 11 16.050813 11.059975 15.190672 14.017112 14.074197 17.205255 15.193451
## 12 33.375657 28.486445 32.617142 29.409358 29.352273 30.221215 24.233019
## 13 10.193509 13.304296 9.434993 8.227210 6.170125 9.039066 7.050871
## 14 9.114506 12.225294 8.355991 9.148207 7.091122 2.039936 6.028132
## 15 35.745303 32.856091 34.986788 29.779004 29.721920 34.590861 26.602665
## 16 9.317959 8.207172 6.076475 9.284258 9.341343 6.472402 10.460597
## 17 35.193887 32.304675 34.435371 31.227588 31.170503 32.039444 28.051249
## 18 20.230025 15.340813 19.471510 16.263726 16.206641 13.075583 9.087387
## 19 9.024955 8.135742 8.266439 5.058656 5.001571 8.129488 8.117684
## 20 6.218146 9.107358 7.023338 10.184445 10.241530 7.372589 13.360784
## 8 9 10 11 12 13 14
## 1 20.561207 6.214106 25.39871 16.050813 33.37566 10.193509 9.114506
## 2 17.671995 9.103318 18.50950 11.059975 28.48644 13.304296 12.225294
## 3 19.802691 7.027379 28.64019 15.190672 32.61714 9.434993 8.355991
## 4 18.594908 10.180405 25.43241 14.017112 29.40936 8.227210 9.148207
## 5 16.537823 10.237489 23.37532 14.074197 29.35227 6.170125 7.091122
## 6 15.406764 11.368548 24.24427 17.205255 30.22121 9.039066 2.039936
## 7 11.418569 11.356744 22.25607 15.193451 24.23302 7.050871 6.028132
## 8 0.000000 18.775312 13.16250 8.612019 14.81445 14.367698 13.446701
## 9 18.775312 0.000000 25.61281 14.163293 33.58976 14.407614 13.328612
## 10 13.162498 25.612814 0.00000 13.449521 17.97695 19.205200 24.284202
## 11 8.612019 14.163293 13.44952 0.000000 19.42647 18.244321 17.165319
## 12 14.814450 33.589763 17.97695 19.426470 0.00000 25.182149 28.261151
## 13 14.367698 14.407614 19.20520 18.244321 25.18215 0.000000 7.079002
## 14 13.446701 13.328612 24.28420 17.165319 28.26115 7.079002 0.000000
## 15 21.184097 35.959409 22.34659 25.796116 10.36965 29.551795 32.630797
## 16 17.879166 9.103854 26.71667 13.267147 32.69362 13.511468 6.432466
## 17 18.632680 35.407993 21.79518 23.244700 5.81823 31.000378 32.079381
## 18 4.331181 18.444131 15.16868 10.280838 17.14563 14.036517 11.115519
## 19 17.536252 13.239060 24.37375 15.075767 28.35070 11.168554 8.089552
## 20 20.779353 4.004041 27.61685 16.167333 35.59380 14.411655 9.332652
## 15 16 17 18 19 20
## 1 35.745303 9.317959 35.193887 20.230025 9.024955 6.218146
## 2 32.856091 8.207172 32.304675 15.340813 8.135742 9.107358
## 3 34.986788 6.076475 34.435371 19.471510 8.266439 7.023338
## 4 29.779004 9.284258 31.227588 16.263726 5.058656 10.184445
## 5 29.721920 9.341343 31.170503 16.206641 5.001571 10.241530
## 6 34.590861 6.472402 32.039444 13.075583 8.129488 7.372589
## 7 26.602665 10.460597 28.051249 9.087387 8.117684 13.360784
## 8 21.184097 17.879166 18.632680 4.331181 17.536252 20.779353
## 9 35.959409 9.103854 35.407993 18.444131 13.239060 4.004041
## 10 22.346595 26.716668 21.795179 15.168683 24.373754 27.616855
## 11 25.796116 13.267147 23.244700 10.280838 15.075767 16.167333
## 12 10.369646 32.693616 5.818230 17.145632 28.350703 35.593803
## 13 29.551795 13.511468 31.000378 14.036517 11.168554 14.411655
## 14 32.630797 6.432466 32.079381 11.115519 8.089552 9.332652
## 15 0.000000 37.063263 8.551416 21.515278 30.720349 39.963450
## 16 37.063263 0.000000 36.511846 15.547985 8.342914 5.099813
## 17 8.551416 36.511846 0.000000 20.963862 28.168932 37.412033
## 18 21.515278 15.547985 20.963862 0.000000 13.205071 18.448171
## 19 30.720349 8.342914 28.168932 13.205071 0.000000 9.243101
## 20 39.963450 5.099813 37.412033 18.448171 9.243101 0.000000
#Method:"euclidean", "maximum","manhattan", "canberra","binary“,"minkowski"
Pengaruh satuan variabel
jarak1sc <- dist(scale(nasabah20[,-1]))
as.matrix(jarak1sc)
## 1 2 3 4 5 6 7 8
## 1 0.000000 4.222115 1.503167 1.966529 1.657187 3.239030 2.988659 4.748612
## 2 4.222115 0.000000 4.264196 3.789213 3.750191 3.632739 3.831429 4.478109
## 3 1.503167 4.264196 0.000000 1.452669 1.697199 3.540080 3.090364 5.128688
## 4 1.966529 3.789213 1.452669 0.000000 0.641918 3.751757 2.860722 4.830957
## 5 1.657187 3.750191 1.697199 0.641918 0.000000 3.582716 2.723575 4.598447
## 6 3.239030 3.632739 3.540080 3.751757 3.582716 0.000000 3.709975 4.325825
## 7 2.988659 3.831429 3.090364 2.860722 2.723575 3.709975 0.000000 3.487291
## 8 4.748612 4.478109 5.128688 4.830957 4.598447 4.325825 3.487291 0.000000
## 9 1.463906 4.349091 1.421056 2.358136 2.370577 3.579195 3.264696 4.991836
## 10 6.088274 4.495430 6.406105 5.495114 5.303122 6.234549 5.290688 3.771058
## 11 4.329000 3.573097 4.289499 4.123048 4.115709 4.578159 3.831203 2.566614
## 12 6.687842 5.889729 6.693894 6.029814 5.953782 6.046117 4.935542 3.290548
## 13 3.668605 4.244502 3.995852 2.972602 2.691967 4.381092 3.048595 4.541123
## 14 3.492755 3.190694 3.677199 3.548789 3.404810 1.113542 3.505456 4.181890
## 15 7.045176 6.952496 7.071157 6.289688 6.211400 7.151355 5.786373 6.172186
## 16 3.910309 2.009075 3.704741 3.855566 3.924629 2.959211 3.549277 4.607033
## 17 7.143566 6.984261 7.111413 6.723192 6.669821 6.415368 5.742799 4.403253
## 18 4.572979 3.035065 4.766326 4.489984 4.336492 2.979827 3.194167 3.114567
## 19 3.798197 2.458887 3.721664 3.658863 3.634808 2.788187 3.565960 4.331672
## 20 3.143875 3.313275 3.124017 3.674045 3.682069 2.069731 4.335164 5.130359
## 9 10 11 12 13 14 15 16
## 1 1.463906 6.088274 4.329000 6.687842 3.668605 3.492755 7.045176 3.910309
## 2 4.349091 4.495430 3.573097 5.889729 4.244502 3.190694 6.952496 2.009075
## 3 1.421056 6.406105 4.289499 6.693894 3.995852 3.677199 7.071157 3.704741
## 4 2.358136 5.495114 4.123048 6.029814 2.972602 3.548789 6.289688 3.855566
## 5 2.370577 5.303122 4.115709 5.953782 2.691967 3.404810 6.211400 3.924629
## 6 3.579195 6.234549 4.578159 6.046117 4.381092 1.113542 7.151355 2.959211
## 7 3.264696 5.290688 3.831203 4.935542 3.048595 3.505456 5.786373 3.549277
## 8 4.991836 3.771058 2.566614 3.290548 4.541123 4.181890 6.172186 4.607033
## 9 0.000000 6.414122 4.128586 6.910284 4.204813 3.809366 7.569292 3.743628
## 10 6.414122 0.000000 3.664780 4.304906 4.889864 5.799054 5.875915 5.922638
## 11 4.128586 3.664780 0.000000 4.598635 4.934002 4.466603 6.877006 3.750399
## 12 6.910284 4.304906 4.598635 0.000000 5.376504 5.636141 4.499786 6.333659
## 13 4.204813 4.889864 4.934002 5.376504 0.000000 3.670550 6.186144 4.795312
## 14 3.809366 5.799054 4.466603 5.636141 3.670550 0.000000 6.974352 2.781855
## 15 7.569292 5.875915 6.877006 4.499786 6.186144 6.974352 0.000000 7.722911
## 16 3.743628 5.922638 3.750399 6.333659 4.795312 2.781855 7.722911 0.000000
## 17 7.431568 5.706394 5.612226 2.544116 6.758234 6.375172 3.878359 7.188550
## 18 4.695822 4.874799 3.743144 4.462450 4.415785 2.721524 6.118842 3.082586
## 19 4.159322 5.540590 3.846328 5.820923 4.994203 2.921665 6.533760 2.215086
## 20 2.886375 6.582593 4.317666 7.053722 5.061526 2.446278 8.186672 2.342275
## 17 18 19 20
## 1 7.143566 4.572979 3.798197 3.143875
## 2 6.984261 3.035065 2.458887 3.313275
## 3 7.111413 4.766326 3.721664 3.124017
## 4 6.723192 4.489984 3.658863 3.674045
## 5 6.669821 4.336492 3.634808 3.682069
## 6 6.415368 2.979827 2.788187 2.069731
## 7 5.742799 3.194167 3.565960 4.335164
## 8 4.403253 3.114567 4.331672 5.130359
## 9 7.431568 4.695822 4.159322 2.886375
## 10 5.706394 4.874799 5.540590 6.582593
## 11 5.612226 3.743144 3.846328 4.317666
## 12 2.544116 4.462450 5.820923 7.053722
## 13 6.758234 4.415785 4.994203 5.061526
## 14 6.375172 2.721524 2.921665 2.446278
## 15 3.878359 6.118842 6.533760 8.186672
## 16 7.188550 3.082586 2.215086 2.342275
## 17 0.000000 5.335901 6.180660 7.565317
## 18 5.335901 0.000000 2.799097 3.885885
## 19 6.180660 2.799097 0.000000 2.994937
## 20 7.565317 3.885885 2.994937 0.000000
jarak2sc <- dist(scale(nasabah20[,-1]),method="manhattan")
as.matrix(jarak2sc)
## 1 2 3 4 5 6 7
## 1 0.000000 10.447623 2.272062 3.9341831 3.0427367 7.112508 7.221496
## 2 10.447623 0.000000 10.804719 8.5775029 8.8116677 8.806032 10.057568
## 3 2.272062 10.804719 0.000000 3.0165716 3.2507363 8.008529 7.429496
## 4 3.934183 8.577503 3.016572 0.0000000 0.9221857 9.670649 5.842263
## 5 3.042737 8.811668 3.250736 0.9221857 0.0000000 8.748464 5.608098
## 6 7.112508 8.806032 8.008529 9.6706495 8.7484638 0.000000 8.190584
## 7 7.221496 10.057568 7.429496 5.8422633 5.6080985 8.190584 0.000000
## 8 13.805909 12.219030 14.013908 13.1146971 12.1925114 10.780367 7.272434
## 9 2.602464 10.491624 2.430455 4.9671968 5.2013616 8.285633 7.506942
## 10 16.904938 11.771227 18.488979 16.1604286 15.2382429 15.996756 13.176844
## 11 10.517758 7.782773 10.265673 9.3889557 9.6231205 12.275112 9.439682
## 12 19.764283 16.059911 19.972283 18.3850507 18.1508859 18.168081 13.972127
## 13 6.673300 11.754078 6.881300 5.9820886 5.0599030 9.056210 5.931363
## 14 8.489016 8.065047 8.697016 8.2416435 7.3194578 1.429006 6.798559
## 15 19.036659 19.999552 19.244658 16.2280867 15.9939219 21.419568 13.244502
## 16 9.743952 4.174678 8.159910 9.0589889 9.2931537 5.985000 8.124215
## 17 20.277884 19.379158 20.485883 19.5868046 19.3526398 18.681681 16.603220
## 18 13.184145 7.510299 13.392145 11.8049125 11.5707478 6.071637 5.962649
## 19 8.321252 4.223238 8.529252 7.6301728 7.3960080 5.958835 8.395662
## 20 6.194320 6.905080 6.017000 8.5590527 8.7932175 3.811410 11.542637
## 8 9 10 11 12 13 14
## 1 13.805909 2.602464 16.904938 10.517758 19.764283 6.673300 8.489016
## 2 12.219030 10.491624 11.771227 7.782773 16.059911 11.754078 8.065047
## 3 14.013908 2.430455 18.488979 10.265673 19.972283 6.881300 8.697016
## 4 13.114697 4.967197 16.160429 9.388956 18.385051 5.982089 8.241643
## 5 12.192511 5.201362 15.238243 9.623120 18.150886 5.059903 7.319458
## 6 10.780367 8.285633 15.996756 12.275112 18.168081 9.056210 1.429006
## 7 7.272434 7.506942 13.176844 9.439682 13.972127 5.931363 6.798559
## 8 0.000000 13.647516 7.199331 4.880096 7.387714 11.367594 9.403860
## 9 13.647516 0.000000 18.175884 10.640599 21.035230 8.831925 9.662141
## 10 7.199331 18.175884 0.000000 8.223306 9.708695 11.607679 15.308270
## 11 4.880096 10.640599 8.223306 0.000000 10.394631 13.253684 11.534127
## 12 7.387714 21.035230 9.708695 10.394631 0.000000 15.208476 16.791573
## 13 11.367594 8.831925 11.607679 13.253684 15.208476 0.000000 7.679702
## 14 9.403860 9.662141 15.308270 11.534127 16.791573 7.679702 0.000000
## 15 15.141053 20.307605 15.735349 18.147970 10.314671 16.598344 20.043061
## 16 10.729516 8.473005 15.945905 7.722599 18.117229 12.923717 5.244015
## 17 10.018807 21.548830 13.027942 13.025724 4.748586 19.957062 19.422667
## 18 5.396751 13.025752 11.301161 8.760183 12.096444 10.745830 4.695129
## 19 11.688984 10.479877 14.734715 9.121658 16.959337 12.453846 6.647322
## 20 14.147938 4.479534 18.676306 11.141021 21.535652 12.423781 5.187918
## 15 16 17 18 19 20
## 1 19.036659 9.743952 20.277884 13.184145 8.321252 6.194320
## 2 19.999552 4.174678 19.379158 7.510299 4.223238 6.905080
## 3 19.244658 8.159910 20.485883 13.392145 8.529252 6.017000
## 4 16.228087 9.058989 19.586805 11.804913 7.630173 8.559053
## 5 15.993922 9.293154 19.352640 11.570748 7.396008 8.793217
## 6 21.419568 5.985000 18.681681 6.071637 5.958835 3.811410
## 7 13.244502 8.124215 16.603220 5.962649 8.395662 11.542637
## 8 15.141053 10.729516 10.018807 5.396751 11.688984 14.147938
## 9 20.307605 8.473005 21.548830 13.025752 10.479877 4.479534
## 10 15.735349 15.945905 13.027942 11.301161 14.734715 18.676306
## 11 18.147970 7.722599 13.025724 8.760183 9.121658 11.141021
## 12 10.314671 18.117229 4.748586 12.096444 16.959337 21.535652
## 13 16.598344 12.923717 19.957062 10.745830 12.453846 12.423781
## 14 20.043061 5.244015 19.422667 4.695129 6.647322 5.187918
## 15 0.000000 21.368717 8.371599 15.347931 18.781486 24.787139
## 16 21.368717 0.000000 20.748323 6.020785 4.704724 3.993471
## 17 8.371599 20.748323 0.000000 14.727537 16.043598 22.049252
## 18 15.347931 6.020785 14.727537 0.000000 6.292233 9.439208
## 19 18.781486 4.704724 16.043598 6.292233 0.000000 6.005654
## 20 24.787139 3.993471 22.049252 9.439208 6.005654 0.000000
clustsingle1 <- hclust(jarak1, method="single")
clustcomp1 <- hclust(jarak1, method="complete")
clustsingle1sc <- hclust(jarak1sc, method="single")
clustcomp1sc <- hclust(jarak1sc, method="complete")
par(mfrow = c(1, 2))
plot(clustsingle1)
plot(clustsingle1sc)
plot(clustcomp1)
plot(clustcomp1sc)
clustsingle2 <- hclust(jarak2, method="single")
clustcomp2 <- hclust(jarak2, method="complete")
clustsingle2sc <- hclust(jarak2sc, method="single")
clustcomp2sc <- hclust(jarak2sc, method="complete")
par(mfrow = c(1, 2))
plot(clustsingle2)
plot(clustsingle2sc)
plot(clustcomp2)
plot(clustcomp2sc)
Package cluster memuat lebih banyak pilihan untuk melakukan cluster analysis.
library(cluster)
pltree(diana(jarak1sc))
Non-hierarchical Clustering
Non-hierarchical clustering, juga dikenal sebagai partitional clustering, adalah salah satu pendekatan dalam analisis klaster yang digunakan untuk mengelompokkan data menjadi beberapa kelompok yang tidak saling terkait. Ini berbeda dengan hierarchical clustering, di mana klaster dibentuk dalam hierarki berdasarkan kesamaan antara data.
Tujuan dari non-hierarchical clustering adalah untuk mempartisi himpunan data menjadi kelompok-kelompok yang homogen sedemikian rupa sehingga data dalam satu kelompok memiliki kesamaan yang tinggi dan data antar kelompok memiliki kesamaan yang rendah.
Salah satu algoritma non-hierarchical clustering yang paling populer adalah algoritma K-Means. Dalam algoritma ini, kita harus menentukan jumlah kelompok/klaster (K) sebelumnya. Algoritma akan mencoba membagi data menjadi K kelompok sedemikian rupa sehingga setiap titik data termasuk dalam satu kelompok yang paling dekat dengan pusat kelompoknya. Proses ini berulang hingga konvergensi, dan hasilnya adalah sejumlah K kelompok.
Selain K-Means, ada berbagai algoritma non-hierarchical clustering lainnya seperti DBSCAN (Density-Based Spatial Clustering of Applications with Noise), Gaussian Mixture Models (GMM), dan Hierarchical Density-Based Spatial Clustering (HDBSCAN), yang masing-masing memiliki pendekatan dan kekuatan yang berbeda.
Salah satu tantangan dalam non-hierarchical clustering adalah menentukan jumlah kelompok yang tepat (K) sebelum menjalankan algoritma. Pemilihan K yang tidak sesuai dapat menghasilkan hasil yang tidak memadai. Beberapa metode, seperti metode elbow atau silhouette score, digunakan untuk membantu dalam pemilihan K yang optimal.
K-Means
K-Means adalah salah satu algoritma non-hierarchical clustering yang paling populer dalam analisis data dan pembelajaran mesin. K-means merupakan algoritma pengelompokan berbasis centroid, di mana kita menghitung jarak antara setiap titik data dan sebuah centroid untuk menetapkannya ke dalam sebuah kelompok. Tujuannya adalah untuk mengidentifikasi jumlah K kelompok dalam dataset.
Ini adalah proses iteratif yang menetapkan setiap titik data ke dalam kelompok-kelompok dan secara perlahan titik-titik data tersebut dikelompokkan berdasarkan fitur-fitur yang mirip. Tujuannya adalah untuk meminimalkan jumlah jarak antara titik-titik data dan centroid kelompok, untuk mengidentifikasi kelompok yang benar-benar seharusnya dimiliki oleh setiap titik data.
Di sini, kita membagi ruang data menjadi K kelompok dan menetapkan nilai rata-rata untuk masing-masingnya. Titik-titik data ditempatkan dalam kelompok-kelompok yang paling mendekati nilai rata-rata dari kelompok tersebut.
Algoritma K-Means
Algoritma ini bekerja dengan cara berulang hingga konvergensi, dan berikut adalah langkah-langkahnya:
- Inisialisasi: Langkah pertama dalam algoritma K-Means adalah menginisialisasi pusat-pusat klaster awal. Jumlah pusat klaster ini ditentukan sebelumnya oleh pengguna dan disebut sebagai K. Pusat-pusat klaster dapat diinisialisasi secara acak atau dengan metode khusus seperti k-means++.
- Pengelompokan (Assignment): Dalam langkah ini, setiap titik data ditempatkan dalam kelompok yang pusat klasternya paling dekat. Jarak antara titik data dan pusat klaster biasanya diukur dengan metrik jarak Euclidean, tetapi metrik jarak lainnya juga dapat digunakan.
Pada langkah ini, kita akan menghitung terlebih dahulu jarak antar titik data X dan centroid C menggunakan jarak Euclidean.
\[ d(x,y)=\sqrt {\sum_{n=1}^{n} (x_i-y_i)^2} \] Lalu memilih klaster yang memiliki jarak antara titik data dan centroid yang minimum.
- Pembaruan Pusat Klaster (Centroid Update): Setelah semua data ditempatkan dalam kelompok, pusat-pusat klaster diperbarui. Pusat klaster baru dihitung sebagai rata-rata dari semua titik data dalam kelompok tersebut. Dengan kata lain, pusat klaster baru adalah “titik tengah” dari semua data dalam kelompok.
\[ C_i=\frac {1}{|N_i|}\sum x_i \]
- Evaluasi Konvergensi: Setelah pembaruan pusat klaster, algoritma mengevaluasi apakah konvergensi telah tercapai. Konvergensi terjadi ketika tidak ada perubahan yang signifikan dalam pusat-pusat klaster atau ketika jumlah perubahan berada di bawah ambang tertentu. Jika konvergensi belum tercapai, algoritma kembali ke langkah pengelompokan dan pembaruan pusat klaster.
Hasil klaster: Setelah algoritma mencapai konvergensi, hasil akhir adalah sejumlah K kelompok, di mana setiap kelompok berisi titik-titik data yang mirip satu sama lain berdasarkan jarak Euclidean atau metrik kesamaan lainnya.
Evaluasi Kualitas klaster (Optional): Setelah clustering selesai, kita dapat mengevaluasi kualitasnya menggunakan metrik seperti Sum of Squared Errors (SSE) atau silhouette score. SSE mengukur seberapa baik titik-titik data dalam kelompok mendekati pusat klaster mereka, sedangkan silhouette score memberikan gambaran tentang seberapa baik data dalam kelompok dibandingkan dengan kelompok lainnya.
Iterasi Tambahan (Optional): Terkadang, algoritma K-Means dapat berjalan lebih dari satu kali dengan inisialisasi pusat klaster yang berbeda untuk mencari solusi yang lebih baik. Hasil terbaik dapat dipilih berdasarkan metrik evaluasi yang sesuai.
Algoritma K-Means akan terus berulang antara langkah-langkah 2 hingga 4 sampai konvergensi tercapai. Proses ini diulang hingga tidak ada perubahan signifikan dalam pusat-pusat klaster, dan pada saat itu, klaster final akan terbentuk.
Penting untuk diingat bahwa K-Means sangat bergantung pada inisialisasi awal, dan hasil clustering dapat bervariasi tergantung pada inisialisasi tersebut. Oleh karena itu, seringkali disarankan untuk menjalankan algoritma beberapa kali dengan inisialisasi yang berbeda untuk mendapatkan hasil yang lebih stabil dan optimal.
Kelebihan dan Kekurangan
Berikut adalah beberapa kelebihan dan kekurangan utama dari K-Means:
Kelebihan K-Means:
Sederhana dan Cepat: K-Means adalah algoritma yang relatif sederhana dan cepat dalam mempartisi data menjadi kelompok-kelompok. Ini membuatnya efisien untuk data berukuran besar.
Skalabilitas: Algoritma ini dapat digunakan pada dataset dengan jumlah fitur yang tinggi dan memiliki skalabilitas yang baik.
Interpretasi yang Mudah: Hasil K-Means relatif mudah diinterpretasikan. Setiap kelompok memiliki pusat klasternya sendiri, dan kita dapat mengidentifikasi titik-titik data yang termasuk dalam setiap kelompok.
Hasil Stabil: Jika inisialisasi awal yang baik digunakan dan algoritma dijalankan beberapa kali, hasil clustering K-Means dapat menjadi relatif stabil.
Kekurangan K-Means:
Hanya dapat digunakan pada data numerik/kontinu. Data kategorik menggunakan metode K-Modes. Data campuran numerik dan kategorik dapat menggunakan metode K-Prototype.
Sensitif terhadap Inisialisasi Awal: Hasil clustering K-Means dapat sangat dipengaruhi oleh inisialisasi awal pusat klaster. Inisialisasi yang buruk dapat menghasilkan solusi yang suboptimal.
Harus Menentukan Jumlah Kelompok (K): Kita harus menentukan jumlah kelompok (K) sebelum menjalankan algoritma. Pemilihan K yang tidak tepat dapat menghasilkan hasil clustering yang tidak sesuai.
Klaster dengan Bentuk Berbentuk Convex: K-Means bekerja baik ketika kelompok memiliki bentuk convex dan ukuran yang seragam. Ini dapat menghasilkan hasil yang buruk untuk kelompok dengan bentuk yang tidak teratur atau ukuran yang tidak seragam.
Sensitif terhadap Outlier: Titik data yang ekstrem (outlier) dapat memengaruhi pusat klaster dan menghasilkan clustering yang tidak baik.
Algoritma ini kurang efisien dalam menangani kelompok dengan ukuran yang tidak sama.
Ilustrasi 1
Melanjutkan ilustrasi sebelumnya
kmeans(jarak1sc, 3)
## K-means clustering with 3 clusters of sizes 4, 13, 3
##
## Cluster means:
## 1 2 3 4 5 6 7 8
## 1 4.934716 3.895425 5.147654 4.734776 4.588442 4.529590 3.950837 2.363060
## 2 2.696487 3.311954 2.707093 2.656216 2.597050 2.949789 3.113375 4.567834
## 3 6.958861 6.608828 6.958821 6.347564 6.278334 6.537614 5.488238 4.621996
## 9 10 11 12 13 14 15 16
## 1 5.057591 3.077659 2.493635 4.164135 4.695193 4.292268 6.260987 4.340664
## 2 2.893089 5.727857 4.175638 6.105227 3.671509 2.889458 6.898521 3.060843
## 3 7.303714 5.295738 5.695956 2.347967 6.106961 6.328555 2.792715 7.081707
## 17 18 19 20
## 1 5.264444 2.933127 4.129422 4.979126
## 2 6.791532 3.767349 3.147060 3.005659
## 3 2.140825 5.305731 6.178448 7.601904
##
## Clustering vector:
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
## 2 2 2 2 2 2 2 1 2 1 1 3 2 2 3 2 3 1 2 2
##
## Within cluster sum of squares by cluster:
## [1] 82.66876 268.60859 46.11082
## (between_SS / total_SS = 62.9 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
kmeans(jarak2sc, 3)
## K-means clustering with 3 clusters of sizes 4, 9, 7
##
## Cluster means:
## 1 2 3 4 5 6 7
## 1 18.995941 16.802462 19.547951 17.590093 17.183923 18.566522 14.249173
## 2 9.871518 6.982074 9.922294 9.258865 8.951470 6.610730 7.137928
## 3 3.531295 9.684614 3.409732 3.911611 3.752877 7.813343 7.297471
## 8 9 10 11 12 13 14
## 1 9.936726 20.266887 9.617997 12.447908 6.192988 15.842890 17.891393
## 2 8.041226 10.245899 12.628613 7.946248 14.438561 10.574003 5.979674
## 3 13.184296 4.073277 16.464637 10.690116 19.150266 6.550328 7.896699
## 15 16 17 18 19 20
## 1 8.605405 19.04504 6.537032 13.368269 16.629784 21.762088
## 2 18.165982 5.85617 16.516746 5.634408 6.336962 8.019371
## 3 18.885202 8.80660 20.465479 11.880392 8.688009 6.638129
##
## Clustering vector:
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
## 3 2 3 3 3 2 2 2 3 1 2 1 3 2 1 2 1 2 2 3
##
## Within cluster sum of squares by cluster:
## [1] 735.4778 1579.6806 694.7096
## (between_SS / total_SS = 71.6 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
#Partitioning Around Medoids
library(cluster)
nasabah.pam <- pam(jarak1sc,3)
nasabah.pam
## Medoids:
## ID
## [1,] "5" "5"
## [2,] "16" "16"
## [3,] "12" "12"
## Clustering vector:
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
## 1 2 1 1 1 2 1 3 1 3 2 3 1 2 3 2 3 2 2 2
## Objective function:
## build swap
## 2.278113 2.278113
##
## Available components:
## [1] "medoids" "id.med" "clustering" "objective" "isolation"
## [6] "clusinfo" "silinfo" "diss" "call"
Ilustrasi 2
Diketahui data Mall_Customers.csv yang ingin dikelompokkan berdasarkan peubah Age, Annual.Income, dan Spending.Score, untuk dapat memberikan gambaran strategi marketing yang baik untuk dilakukan.
Tentukanlah gerombol customer tersebut dengan menggunakan metode K-Means.
#persiapan data
data.mall <- read.csv("Mall_Customers.csv", sep = ";")
str(data.mall)
## 'data.frame': 200 obs. of 5 variables:
## $ CustomerID : int 1 2 3 4 5 6 7 8 9 10 ...
## $ Genre : chr "Male" "Male" "Female" "Female" ...
## $ Age : int 19 21 20 23 31 22 35 23 64 30 ...
## $ Annual.Income : int 15 15 16 16 17 17 18 18 19 19 ...
## $ Spending.Score: int 39 81 6 77 40 76 6 94 3 72 ...
head(data.mall)
#data yang digunakan hanya kolom 3 sampai 5
data.mall.OK <- data.mall[,3:5]
str(data.mall.OK)
## 'data.frame': 200 obs. of 3 variables:
## $ Age : int 19 21 20 23 31 22 35 23 64 30 ...
## $ Annual.Income : int 15 15 16 16 17 17 18 18 19 19 ...
## $ Spending.Score: int 39 81 6 77 40 76 6 94 3 72 ...
head(data.mall.OK)
boxplot(data.mall.OK)
#standarisasi peubah
data.mall.stdz <- scale(data.mall.OK)
apply(data.mall.stdz,2,mean) #rataan 0
## Age Annual.Income Spending.Score
## -1.016906e-16 -8.144310e-17 -1.096708e-16
apply(data.mall.stdz,2,sd) #sd 1
## Age Annual.Income Spending.Score
## 1 1 1
#install.packages("factoextra")
library(factoextra)
## Loading required package: ggplot2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
Pada K-Means ditetapkan k = 4
kmeans.mall <- eclust(data.mall.OK,stand = TRUE,FUNcluster = "kmeans",k=4,graph = T)
kmeans.mall$cluster
## [1] 3 3 3 3 3 3 2 3 2 3 2 3 2 3 2 3 3 3 2 3 3 3 2 3 2 3 2 3 2 3 2 3 2 3 2 3 2
## [38] 3 2 3 2 3 2 3 2 3 2 3 3 3 2 3 3 2 2 2 2 2 3 2 2 3 2 2 2 3 2 2 3 3 2 2 2 2
## [75] 2 3 2 2 3 2 2 3 2 2 3 2 2 3 3 2 2 3 2 2 3 3 2 3 2 3 3 2 2 3 2 3 2 2 2 2 2
## [112] 3 1 3 3 3 2 2 2 2 3 1 4 4 1 4 1 4 2 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4
## [149] 1 4 1 4 1 4 1 4 1 4 1 4 2 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1
## [186] 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4
table(kmeans.mall$cluster)
##
## 1 2 3 4
## 38 65 57 40
#interpretasi
kmeans.mall$centers
## Age Annual.Income Spending.Score
## 1 0.03711223 0.9876366 -1.1857814
## 2 1.08344244 -0.4893373 -0.3961802
## 3 -0.96008279 -0.7827991 0.3910484
## 4 -0.42773261 0.9724070 1.2130414
aggregate(data.mall.OK,by=list(cluster=kmeans.mall$cluster),FUN = mean)
#scatterplot
fviz_cluster(kmeans.mall)
Ilustrasi 3
Dataset ini terdiri dari persentase populasi pekerja pada lapangan usaha (industri) yang berbeda di 26 negera di Eropa pada tahun 1979. Dataset ini memiliki 10 variabel.
Country
: nama negaraAgr
: % dari pekerja di AgricultureMin
: % dari pekerja di MiningMan
: % dari pekerja di ManufacturingPS
: % dari pekerja di Power Supplies IndustriesCon
: % dari pekerja di ConstructionSI
: % dari pekerja di Service IndustriesFin
: % dari pekerja di FinanceSPS
: % dari pekerja di Social and Personal ServicesTC
: % dari pekerja di Transportation and Communications
# Import data
Eurojobs <- read.csv(
file = "https://statsandr.com/blog/data/Eurojobs.csv",
sep = ",",
dec = ".",
header = TRUE
)
head(Eurojobs) # head() is used to display only the first 6 observations
Menambahkan argumen row.names = 1
pada fungsi import
read.csv()
untuk menspesifikasi bahwa kolom pertama
berhubungan dengan nama baris.
Eurojobs <- read.csv(
file = "https://statsandr.com/blog/data/Eurojobs.csv",
sep = ",",
dec = ".",
header = TRUE,
row.names = 1
)
Eurojobs # displays dataset
Pada dataset ini tidak perlu melakukan standardisasi data karena semua variabel memiliki satuan yang sama yaitu persen (%).
Berikutnya kita akan melakukan k-means clustering dengan 2 klaster.
#argument centers corresponds to the number of desired clusters
set.seed(123)
model <- kmeans(Eurojobs, centers = 2)
model
## K-means clustering with 2 clusters of sizes 5, 21
##
## Cluster means:
## Agr Min Man PS Con SI Fin SPS TC
## 1 44.54000 1.48 19.62000 0.6600000 6.580000 7.30000 3.400000 11.20000 5.16000
## 2 13.08095 1.20 28.76667 0.9666667 8.542857 14.30476 4.142857 22.12381 6.87619
##
## Clustering vector:
## Belgium Denmark France W. Germany Ireland
## 2 2 2 2 2
## Italy Luxembourg Netherlands United Kingdom Austria
## 2 2 2 2 2
## Finland Greece Norway Portugal Spain
## 2 1 2 2 2
## Sweden Switzerland Turkey Bulgaria Czechoslovakia
## 2 2 1 2 2
## E. Germany Hungary Poland Rumania USSR
## 2 2 1 1 2
## Yugoslavia
## 1
##
## Within cluster sum of squares by cluster:
## [1] 1301.360 2953.174
## (between_SS / total_SS = 54.3 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
# displays the class determined by
# the model for all observations:
model$cluster
## Belgium Denmark France W. Germany Ireland
## 2 2 2 2 2
## Italy Luxembourg Netherlands United Kingdom Austria
## 2 2 2 2 2
## Finland Greece Norway Portugal Spain
## 2 1 2 2 2
## Sweden Switzerland Turkey Bulgaria Czechoslovakia
## 2 2 1 2 2
## E. Germany Hungary Poland Rumania USSR
## 2 2 1 1 2
## Yugoslavia
## 1
table(model$cluster)
##
## 1 2
## 5 21
Klaster pada masing-masing amatan dapat disimpan langsung ke dalam dataset menjadi sebuah kolom.
Eurojobs_cluster <- data.frame(Eurojobs,
cluster = as.factor(model$cluster)
)
head(Eurojobs_cluster)
#Menyimpan ke dalam file csv
write.csv(Eurojobs_cluster, file = "Eurojobs_cluster.csv")
Kualitas dari K-Means Partition
Kualitas dari K-Means Partition dapat dilihat dengan menghitung persentase dari Total Sum of Squares (TSS) “explained” dengan formula: (BSS/TSS) x 100% di mana BSS merupakan Between Sum of Squares. Semakin tinggi persentase maka semakin baik kualitas dari K-Means Partition karena BSS yang besar atau WSS (Within Sum of Squares) yang kecil.
# BSS and TSS are extracted from the model and stored
(BSS <- model$betweenss)
## [1] 5045.056
(TSS <- model$totss)
## [1] 9299.59
# We calculate the quality of the partition
BSS / TSS * 100
## [1] 54.2503
Selanjutkan kita akan melihat bagaimana K-Means Clustering dengan 3 klaster.
set.seed(123)
model2 <- kmeans(Eurojobs, centers = 3)
model2
## K-means clustering with 3 clusters of sizes 9, 14, 3
##
## Cluster means:
## Agr Min Man PS Con SI Fin SPS
## 1 25.022222 1.7777778 28.07778 0.9333333 8.722222 9.544444 2.133333 17.11111
## 2 8.235714 0.9857143 29.08571 0.9571429 8.428571 16.278571 5.000000 24.17143
## 3 52.300000 0.9333333 14.10000 0.6000000 5.266667 7.700000 4.933333 9.40000
## TC
## 1 6.688889
## 2 6.864286
## 3 4.633333
##
## Clustering vector:
## Belgium Denmark France W. Germany Ireland
## 2 2 2 2 1
## Italy Luxembourg Netherlands United Kingdom Austria
## 2 2 2 2 2
## Finland Greece Norway Portugal Spain
## 2 3 2 1 1
## Sweden Switzerland Turkey Bulgaria Czechoslovakia
## 2 2 3 1 1
## E. Germany Hungary Poland Rumania USSR
## 2 1 1 1 1
## Yugoslavia
## 3
##
## Within cluster sum of squares by cluster:
## [1] 691.3022 1139.6936 531.6067
## (between_SS / total_SS = 74.6 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
model2$cluster
## Belgium Denmark France W. Germany Ireland
## 2 2 2 2 1
## Italy Luxembourg Netherlands United Kingdom Austria
## 2 2 2 2 2
## Finland Greece Norway Portugal Spain
## 2 3 2 1 1
## Sweden Switzerland Turkey Bulgaria Czechoslovakia
## 2 2 3 1 1
## E. Germany Hungary Poland Rumania USSR
## 2 1 1 1 1
## Yugoslavia
## 3
table(model2$cluster)
##
## 1 2 3
## 9 14 3
BSS2 <- model2$betweenss
TSS2 <- model2$totss
BSS2 / TSS2 * 100
## [1] 74.59455
Dapat dilihat bahwa pengklasteran dengan 3 klaster memiliki nilai kualitas partition yang lebih tinggi.
Hal yang akan selalu terjadi: dengan lebih banyak kelas, partisi akan menjadi lebih halus, dan kontribusi BSS akan lebih tinggi. Di sisi lain, “model” akan menjadi lebih kompleks, memerlukan lebih banyak kelas. Dalam kasus ekstrem di mana k = n (setiap observasi adalah kelas singleton), kita memiliki BSS = TSS, tetapi partisi tersebut kehilangan semua kepentingannya.
Metode alternatif lainnya untuk melihat performa K-Means adalah
dengan menggunakan fungsi cluster_analysis()
dari package
parameters.
library(parameters)
set.seed(123)
res_kmeans <- cluster_analysis(Eurojobs,
n = 3,
method = "kmeans"
)
predict(res_kmeans) # get clusters
## [1] 3 3 3 3 3 3 3 3 3 3 3 2 3 3 3 3 3 1 2 2 2 2 2 2 2 1
plot(summary(res_kmeans))
Keuntungan dari fungsi ini adalah dapat memvisualisasikan titik tengah atau rata-rata dari masing-masing variabel pada masing-masing klaster.
Jumlah Klaster Optimal
Untuk menentukan jumlah klaster optimal untuk k-means, disarankan untuk memilihnya berdasarkan:
Konteks masalah yang ada, misalnya jika diketahui bahwa ada jumlah kelompok tertentu dalam data (kita memiliki harapan atau hipotesis yang kuat, pilihan ini bersifat subjektif), atau
Empat pendekatan berikut:
Elbow Method (menggunakan WSS)
Silhouette Method
Gap Statistic Method
Consensus-based algorithm
Elbow Method
# load required packages
library(factoextra)
library(NbClust)
# Elbow method
fviz_nbclust(Eurojobs, kmeans, method = "wss") +
geom_vline(xintercept = 4, linetype = 2) + # add line for better visualisation
labs(subtitle = "Elbow method") # add subtitle
Lokasi lengkungan/siku dalam plot biasanya dianggap sebagai indikator jumlah klaster yang sesuai karena ini berarti penambahan klaster lainnya tidak banyak meningkatkan partisi. Metode ini menyarankan 4 klaster.
Namun Elbow Method ini kadang-kadang juga ambigu.
Silhouette Method
Silhouette Methode mengukur kualitas pengklasteran dan menentukan seberapa baik setiap titik terletak dalam kelompoknya.
# Silhouette method
fviz_nbclust(Eurojobs, kmeans, method = "silhouette") +
labs(subtitle = "Silhouette method")
Silhouette method menyarankan 2 klaster.
Gap Statistic Method
# Gap statistic
set.seed(123)
fviz_nbclust(Eurojobs, kmeans,
nstart = 25,
method = "gap_stat",
nboot = 500 # reduce it for lower computation time (but less precise results)
) +
labs(subtitle = "Gap statistic method")
Jumlah klaster yang optimal pada metode ini adalah yang memaksimumkan gap statistic. Metode ini menyarankan hanya 1 klaster.
Consensus-based algorithm
Karena tidak ada metode yang secara jelas lebih baik, maka alternatif keempat ini akan menjalankan banyak metode dan mengambil jumlah klaster yang paling disepakati (misalnya menemukan consensus).
library(parameters)
n_clust <- n_clusters(Eurojobs,
package = c("easystats", "NbClust", "mclust"),
standardize = FALSE
)
n_clust
plot(n_clust)
Berdasarkan semua indikasi, dapat dikatakan bahwa paling banyak metode merekomendasikan 3 klaster.
Visualisasi
Untuk memastikan bahwa jumlah klaster memang benar-benar optimal, ada cara untuk mengevaluasi kualitas pengklasteran melalui plot silhouette.
Kita akan buat plot silhouette untuk 2 klaster sebagaimana yang disarankan oleh metode silhouette.
library(cluster)
set.seed(123)
km_res <- kmeans(Eurojobs, centers = 2, nstart = 20)
sil <- silhouette(km_res$cluster, dist(Eurojobs))
fviz_silhouette(sil)
## cluster size ave.sil.width
## 1 1 5 0.33
## 2 2 21 0.54
Interpretasi dari koefisien silhouette:
Koefisien > 0 artinya amatan diklasterkan dengan baik. Semakin mendekati nilai 1 maka semakin baik pengklasteran.
Koefisien < 0 artinya amatan ditempatkan pada klaster yang salah.
Koefisien = 0 artinya amatan berada di antara dua klaster.
Dilihat pada plot, jika sebagian besar koefisien silhouette positif maka ini menunjukkan bahwa amatan ditempatkan dalam klaster yang benar.
library(factoextra)
fviz_cluster(km_res, Eurojobs, ellipse.type = "norm")
Evaluasi Klaster
Dalam memvalidasi pengklasteran yang telah dibentuk, terdapat beberapa hal yang biasanya dievaluasi:
-
Clustering tendency
- Visualisasi, uji hopitesis, misalnya uji Hopkins, SigClust
-
Banyaknya klaster
- Berdasrkan pengetahuan domain, metode elbow, gap statistics
-
Kualitas penggerombolan
Ekstrinsik: memerlukan label “groundh truth”
-
Instrinsik: tidak perlu label
- Indeks Calinski-Harabasz, Davies-Boulding, Koefisien Silohouette
Indeks Calinski-Harabasz (CH)
Indeks CH mengukur keragaman antarklaster terhadap keragaman di dalam klaster. Semakin tinggi nilai indeks CH maka menunjukkan semakin baik pengklasteran. Rentang nilai indeks CH > 0, di mana jika CH lebih besar, artinya perbedaan antarklaster lebih besar dibandingkan dengan di dalam klaster.
Beberapa catatan tentang kriteria indeks CH, yaitu:
Relatif dapat dihitung dengan cepat dan mudah.
Mengasumsikan klaster berbentuk bulat di sekitar pusat gerombol, dan tidak memperhitungkan pemisahan antarklaster yang cenderung bernilai ekstrem.
Menganggap gerombol sebagai terpisah jika rataannya jauh berbeda satu sama lain.
Tidak memperhitungkan ukuran dimensi peubah (p) dalam perhitungannya.
Pada kasus data berdimensi besar, mungkin kinerjanya tidak sebaik jika dimensinya kecil (p<=10)
Sebaiknya tidak digunakan untuk membandingkan pengklasteran dengan algoritma berbeda.
The criterion is based on balancing the within-cluster variation:
\[ W_{C_K} = \sum_{j=1}^{K} \sum_{c(i)=j} (x_i-\overline x_j)(x_i-\overline x_j)^t \]
Against the between-cluster variation:
\[ B_{C_K} = \sum_{j=1}^{K} n_j (x_j-\overline x)(x_j-\overline x)^t \]
CH’s variance ration criterion:
\[ CH(C_K)=\frac {trace(B_{C_K})}{trace(W_{C_K})} \times \frac {n-K}{K-1} \]
Beberapa pengembangan dari kriteria indeks Calinski-Harabasz:
- Krzanowski dan Lai (1988) -> indeks KL
- Memperhitungkan ukuran dimensi peubah (p)
- Sugar dan James (2003) -> indeks SJ
- Memperhitungkan teori distorsi asimptotik pada sebaran campuran Gaussian
- Halkidi et al. (2000) -> indeks validitas SD
- Memperhitungkan penalti untuk ukuran klaster (K) yang terlalu besar jika jarak antar rataan klaster terlalu kecil.
Indeks Davies-Bouldin (DB)
Biasanya digunakan \(p=q=2\), sehingga indeks Davies-Boulding (DB) dapat dianggap sebagai kriteria berbasis keragaman.
Setiap klaster diberikan bobot yang sama pada perhitungan DB, terlepas dari seberapa besar ukurannya.
Pengklasteran yang baik akan menghasilkan nilai indeks DB yang kecil, karena \(S_i\) (dispesi intra-klaster) akan bernilai kecil sedangkan \(M_ij\) (jarak antarklaster) akan bernilai besar.
Nilai indeks DB berkisar antara 0 hingga 1, sehingga lebih mudah diinterpretasikan.
Kriteria indeks Davies-Bouldin (DB) diperoleh melalui perhitungan berikut.
\[ S_k=(\frac {1}{n_k} \sum_{c(i)=k}||x_i-\overline x_k||_2^q)^{1/q} \]
\[ M_ij=||\overline x_i-\overline x_j||_p \]
\[ R_{ij}=\frac {S_i+S_j}{M_ij} \]
\[ D_i=max_{j \neq i} R_{ij} \]
\[ DB(C_K)=\frac {1}{K}\sum_{i=1}^K D_i \]
Average Silhouette Width (ASW)
Kriteria ini berdasarkan kompromi antara homogenitas di dalam klaster dengan pemisahan antarklaster, yang mengukur bagaimana kemungkinan suatu titik ditempatkan pada klaster lain.
Koefisien Silhouette dapat dihitung dengan formula berikut:
\[ s_i=\frac {b_i-a_i}{max(a_i,b_i)} \]
di mana \(a_i=\frac{1}{n_k-1}\sum_{c(j)=k}d(x_i,x_i)\) adalah ketidaksamaan rata-rata klaster dari \(x_i\) (jika \(n_k=1\) maka \(s_i=0\)) dan \(b_i=min_{l\neq k} \frac {1}{n_l} \sum_{c(j)=l}d(x_i,x_i)\) adalah ketidaksamaan rata-rata ke klaster terdekat.
Sehingga ASW dapat dihitung sebagai rataan dari koefisien Silhouette dari setiap klaster ke-i.
\[ ASW(C_K)=\frac {1}{n}\sum_{i=1}^n S_i \]
Jika \(b_i>>a_i\), artinya \(x_i\) sudah sangat tepat berada di klasternya.
Koefisien Silhouette berkisar antara -1 dan 1, di mana pengklasteran dianggap baik jika nilainya semakin besar.
Serupa dengan banyak kriteria lain, hasil dari kriteria ini mungkin akan bermasalah pada data dengan amatan pencilan.
Kriteria evaluasi lainnya dapat dipelajari pada Hennig et al. (2016) pada bagian subbab 2.6 lainnya.
K-Medoids Clustering
library(cluster)
fviz_nbclust(Eurojobs, FUNcluster=cluster::pam, method = "wss")+
theme_classic()
Misal kita pilih klaster sebanyak 4.
pam.res <- pam(Eurojobs, 4)
print(pam.res)
## Medoids:
## ID Agr Min Man PS Con SI Fin SPS TC
## Netherlands 8 6.3 0.1 22.5 1.0 9.9 18.0 6.8 28.5 6.8
## Luxembourg 7 7.7 3.1 30.8 0.8 9.2 18.5 4.6 19.2 6.2
## Hungary 22 21.7 3.1 29.6 1.9 8.2 9.4 0.9 17.2 8.0
## Yugoslavia 26 48.7 1.5 16.8 1.1 4.9 6.4 11.3 5.3 4.0
## Clustering vector:
## Belgium Denmark France W. Germany Ireland
## 1 1 2 2 3
## Italy Luxembourg Netherlands United Kingdom Austria
## 2 2 1 1 2
## Finland Greece Norway Portugal Spain
## 1 4 1 3 3
## Sweden Switzerland Turkey Bulgaria Czechoslovakia
## 1 2 4 3 3
## E. Germany Hungary Poland Rumania USSR
## 2 3 3 3 3
## Yugoslavia
## 4
## Objective function:
## build swap
## 8.751986 8.245297
##
## Available components:
## [1] "medoids" "id.med" "clustering" "objective" "isolation"
## [6] "clusinfo" "silinfo" "diss" "call" "data"
pam<-eclust(Eurojobs, "pam", hc_metric="euclidean",k=4)
#pam.res$medoids
pam$medoids
## Agr Min Man PS Con SI Fin SPS TC
## Netherlands 6.3 0.1 22.5 1.0 9.9 18.0 6.8 28.5 6.8
## Luxembourg 7.7 3.1 30.8 0.8 9.2 18.5 4.6 19.2 6.2
## Hungary 21.7 3.1 29.6 1.9 8.2 9.4 0.9 17.2 8.0
## Yugoslavia 48.7 1.5 16.8 1.1 4.9 6.4 11.3 5.3 4.0
#pam.res$clustering
pam$clustering
## Belgium Denmark France W. Germany Ireland
## 1 1 2 2 3
## Italy Luxembourg Netherlands United Kingdom Austria
## 2 2 1 1 2
## Finland Greece Norway Portugal Spain
## 1 4 1 3 3
## Sweden Switzerland Turkey Bulgaria Czechoslovakia
## 1 2 4 3 3
## E. Germany Hungary Poland Rumania USSR
## 2 3 3 3 3
## Yugoslavia
## 4
K-Means Clustering
km<-eclust(Eurojobs, "kmeans", hc_metric="euclidean",k=4)
CH Index
#install.packages("clusterSim")
library(clusterSim)
## Warning: package 'clusterSim' was built under R version 4.2.3
## Loading required package: MASS
(ch.km<-index.G1(Eurojobs, cl=km$cluster))
## [1] 30.70389
(ch.pam<-index.G1(Eurojobs, cl=pam$cluster))
## [1] 29.68018
DB Index
(db.km<-index.DB(Eurojobs, cl=km$cluster)$DB)
## [1] 0.9291836
(db.pam<-index.DB(Eurojobs, cl=pam$cluster)$DB)
## [1] 0.9387358
ASW
library(fpc)
## Warning: package 'fpc' was built under R version 4.2.3
(sil.km<-fviz_silhouette(km))
## cluster size ave.sil.width
## 1 1 7 0.21
## 2 2 8 0.40
## 3 3 3 0.25
## 4 4 8 0.43
(sil.pam<-fviz_silhouette(pam))
## cluster size ave.sil.width
## 1 1 7 0.42
## 2 2 7 0.25
## 3 3 9 0.35
## 4 4 3 0.28
clust.eval<-data.frame(
Method=c("K-Means", "K-Medoids"),
CH=c(ch.km, ch.pam),
DB=c(db.km, db.pam),
ASW=c(colMeans(sil.km$data[3]), colMeans(sil.pam$data[3]))
)
clust.eval
Referensi
Anisa, R. 2023. Metode Penggerombolan dan Evaluasinya [Slide Kuliah STA1382 Teknik Pembelajaran Mesin IPB University]
Hennig, C., Meila, M., Murtagh, F., & Rocci, R. (Eds.). (2015). Handbook of cluster analysis. CRC press.
Sarah, M. 2023. A Comprehensive Guide to Cluster Analysis: Applications, Best Practices and Resources. [diakses 2023 Sep 12]; https://www.displayr.com/understanding-cluster-analysis-a-comprehensive-guide/
Sharma, N. 2023. K-Means Clustering Explained. [diakses 2023 Sep 14]; https://neptune.ai/blog/k-means-clustering#:~:text=K%2Dmeans%2B%2B%20is%20a,as%20possible%20from%20one%20another.
Soetewey, A. 2020. The complete guide to clustering analysis: k-means and hierarchical clustering by hand and in R. [diakses 2023 Sep 12]; https://statsandr.com/blog/clustering-analysis-k-means-and-hierarchical-clustering-by-hand-and-in-r/
Susetya, B. 2022. Un-supervised Classification: Analisis Gerombol Hirarkhi dan Nn-Hirarkhi [Slide Kuliah STA1551 Pemodelan Klasifikasi IPB University]