Clustering tergantung pada skala , antara lain. Untuk diskusi tentang masalah ini lihat ( antara lain ) Kapan Anda harus memusatkan dan menstandardisasi data? dan PCA tentang kovarian atau korelasi? .
Berikut adalah data Anda yang diambil dengan rasio aspek 1: 1, mengungkapkan seberapa besar perbedaan dari dua variabel:
Di sebelah kanannya, plot statistik gap menunjukkan statistik berdasarkan jumlah cluster ( ) dengan kesalahan standar yang digambar dengan segmen vertikal dan nilai optimal ditandai dengan garis biru putus-putus vertikal. Menurut bantuan itu,kkkclusGap
Metode default "firstSEmax" mencari terkecil sehingga nilainya tidak lebih dari 1 kesalahan standar dari maksimum lokal pertama.f ( k )kf( k )
Metode lain berperilaku serupa. Kriteria ini tidak menyebabkan statistik gap menonjol, sehingga menghasilkan perkiraan .k = 1
Pilihan skala tergantung pada aplikasi, tetapi titik awal default yang masuk akal adalah ukuran dispersi data, seperti MAD atau standar deviasi. Plot ini mengulangi analisis setelah memasukkan kembali ke nol dan mengubah ukuran untuk membuat deviasi standar satuan untuk setiap komponen dan :bSebuahb
Solusi K-means ditunjukkan dengan memvariasikan jenis simbol dan warna di sebar data di sebelah kiri. Di antara set , jelas disukai dalam plot statistik gap di sebelah kanan: ini adalah maksimum lokal pertama dan statistik untuk lebih kecil (yaitu, ) jauh lebih rendah. Nilai yang lebih besar dari cenderung sesuai untuk set data kecil seperti itu, dan tidak ada yang secara signifikan lebih baik daripada . Mereka ditampilkan di sini hanya untuk menggambarkan metode umum. k ∈ { 1 , 2 , 3 , 4 , 5 } k = 2 k k = 1 k k = 2k = 2k ∈ { 1 , 2 , 3 , 4 , 5 }k = 2kk = 1kk = 2
Berikut adalah R
kode untuk menghasilkan angka-angka ini. Data kira-kira cocok dengan yang ditunjukkan dalam pertanyaan.
library(cluster)
xy <- matrix(c(29,391, 31,402, 31,380, 32.5,391, 32.5,360, 33,382, 33,371,
34,405, 34,400, 34.5,404, 36,343, 36,320, 36,303, 37,344,
38,358, 38,356, 38,351, 39,318, 40,322, 40, 341), ncol=2, byrow=TRUE)
colnames(xy) <- c("a", "b")
title <- "Raw data"
par(mfrow=c(1,2))
for (i in 1:2) {
#
# Estimate optimal cluster count and perform K-means with it.
#
gap <- clusGap(xy, kmeans, K.max=10, B=500)
k <- maxSE(gap$Tab[, "gap"], gap$Tab[, "SE.sim"], method="Tibs2001SEmax")
fit <- kmeans(xy, k)
#
# Plot the results.
#
pch <- ifelse(fit$cluster==1,24,16); col <- ifelse(fit$cluster==1,"Red", "Black")
plot(xy, asp=1, main=title, pch=pch, col=col)
plot(gap, main=paste("Gap stats,", title))
abline(v=k, lty=3, lwd=2, col="Blue")
#
# Prepare for the next step.
#
xy <- apply(xy, 2, scale)
title <- "Standardized data"
}