Tentang k-means secara khusus, Anda dapat menggunakan statistik Gap. Pada dasarnya, idenya adalah untuk menghitung kebaikan ukuran pengelompokan berdasarkan dispersi rata-rata dibandingkan dengan distribusi referensi untuk peningkatan jumlah cluster. Informasi lebih lanjut dapat ditemukan di koran asli:
Tibshirani, R., Walther, G., dan Hastie, T. (2001). Memperkirakan jumlah cluster dalam satu set data melalui statistik gap . Statistik JR. Soc. B, 63 (2): 411-423.
Jawaban yang saya berikan untuk pertanyaan terkait menyoroti indeks validitas umum lainnya yang dapat digunakan untuk memeriksa apakah dataset yang diberikan menunjukkan semacam struktur.
Ketika Anda tidak tahu apa yang Anda harapkan untuk menemukan jika hanya ada kebisingan, pendekatan yang baik adalah dengan menggunakan resampling dan mempelajari stabilitas cluster. Dengan kata lain, sampel ulang data Anda (melalui bootstrap atau dengan menambahkan noise kecil ke dalamnya) dan hitung "kedekatan" dari partisi yang dihasilkan, yang diukur dengan kesamaan Jaccard . Singkatnya, ini memungkinkan untuk memperkirakan frekuensi cluster yang sama ditemukan dalam data. Metode ini sudah tersedia dalam paket fpc R sebagai clusterboot()
. Dibutuhkan sebagai input data mentah atau matriks jarak, dan memungkinkan untuk menerapkan berbagai metode pengelompokan (hierarkis, k-cara, metode fuzzy). Metode ini dibahas dalam referensi terkait:
Hennig, C. (2007) Penilaian klaster untuk stabilitas cluster .
Statistik Komputasi dan Analisis Data , 52, 258-271.
Hennig, C. (2008) Titik disolusi dan ketahanan isolasi: kriteria ketahanan untuk metode analisis kluster umum . Jurnal Analisis Multivariat , 99, 1154-1176.
Di bawah ini adalah demonstrasi kecil dengan algoritma k-means.
sim.xy <- function(n, mean, sd) cbind(rnorm(n, mean[1], sd[1]),
rnorm(n, mean[2],sd[2]))
xy <- rbind(sim.xy(100, c(0,0), c(.2,.2)),
sim.xy(100, c(2.5,0), c(.4,.2)),
sim.xy(100, c(1.25,.5), c(.3,.2)))
library(fpc)
km.boot <- clusterboot(xy, B=20, bootmethod="boot",
clustermethod=kmeansCBI,
krange=3, seed=15555)
Hasilnya cukup positif dalam dataset buatan (dan terstruktur dengan baik) ini karena tidak satu pun dari tiga cluster ( krange
) yang dilarutkan di seluruh sampel, dan rata-rata kesamaan Jaccard clusterwise adalah> 0,95 untuk semua cluster.
Di bawah ini adalah hasil dari 20 sampel bootstrap. Seperti dapat dilihat, unit statistik cenderung untuk tetap dikelompokkan ke dalam kelompok yang sama, dengan beberapa pengecualian untuk pengamatan yang berada di antaranya.
Anda dapat memperluas gagasan ini ke indeks validitas apa pun, tentu saja: pilih seri pengamatan baru dengan bootstrap (dengan penggantian), hitung statistik Anda (mis., Lebar siluet, korelasi cophenetic, gamma Hubert, dalam jumlah kuadrat) untuk rentang nomor kluster (mis. 2 hingga 10), ulangi 100 atau 500 kali, dan lihat boks kotak statistik Anda sebagai fungsi dari jumlah kluster.
Inilah yang saya dapatkan dengan dataset simulasi yang sama, tetapi menggunakan clustering hierarkis Ward dan mempertimbangkan korelasi cophenetic (yang menilai seberapa baik informasi jarak direproduksi dalam partisi yang dihasilkan) dan lebar siluet (ukuran kombinasi menilai homogenitas intra-cluster dan inter- pemisahan cluster).
Korelasi cophenetic berkisar dari 0,6267 hingga 0,7511 dengan nilai median 0,7031 (500 sampel bootstrap). Lebar siluet tampak maksimal ketika kita mempertimbangkan 3 cluster (median 0,8408, kisaran 0,7371-0,8769).