Menjadi pemula di R, saya tidak begitu yakin bagaimana memilih jumlah cluster terbaik untuk melakukan analisis k-means. Setelah merencanakan subkumpulan data di bawah ini, berapa banyak kluster yang akan sesuai? Bagaimana saya bisa melakukan analisis dendro klaster?
n = 1000
kk = 10
x1 = runif(kk)
y1 = runif(kk)
z1 = runif(kk)
x4 = sample(x1,length(x1))
y4 = sample(y1,length(y1))
randObs <- function()
{
ix = sample( 1:length(x4), 1 )
iy = sample( 1:length(y4), 1 )
rx = rnorm( 1, x4[ix], runif(1)/8 )
ry = rnorm( 1, y4[ix], runif(1)/8 )
return( c(rx,ry) )
}
x = c()
y = c()
for ( k in 1:n )
{
rPair = randObs()
x = c( x, rPair[1] )
y = c( y, rPair[2] )
}
z <- rnorm(n)
d <- data.frame( x, y, z )
r
cluster-analysis
k-means
pengguna2153893
sumber
sumber
fpc
paket. Memang benar, Anda kemudian harus menetapkan dua parameter ... tetapi saya telah menemukan bahwafpc::dbscan
kemudian melakukan pekerjaan yang cukup baik secara otomatis menentukan jumlah cluster yang baik. Plus itu sebenarnya dapat menghasilkan satu cluster jika data itu memberi tahu Anda - beberapa metode dalam jawaban luar biasa @ Ben tidak akan membantu Anda menentukan apakah k = 1 sebenarnya yang terbaik.Jawaban:
Jika pertanyaan Anda adalah
how can I determine how many clusters are appropriate for a kmeans analysis of my data?
, maka berikut adalah beberapa opsi. The artikel wikipedia pada penentuan jumlah cluster memiliki review yang baik tentang beberapa metode ini.Pertama, beberapa data yang dapat direproduksi (data dalam Q itu ... tidak jelas bagi saya):
Satu . Cari tikungan atau siku dalam jumlah plot scree jumlah kuadrat (SSE). Lihat http://www.statmethods.net/advstats/cluster.html & http://www.mattpeeples.net/kmeans.html untuk informasi lebih lanjut. Lokasi siku di plot yang dihasilkan menunjukkan jumlah cluster yang cocok untuk kmeans:
Kami dapat menyimpulkan bahwa 4 cluster akan ditunjukkan dengan metode ini:
Dua . Anda dapat melakukan partisi di sekitar medoid untuk memperkirakan jumlah cluster menggunakan
pamk
fungsi dalam paket fpc.Tiga . Kriteria Calinsky: Pendekatan lain untuk mendiagnosis berapa banyak cluster yang sesuai dengan data. Dalam hal ini kami mencoba 1 hingga 10 grup.
Empat . Tentukan model yang optimal dan jumlah cluster berdasarkan Kriteria Informasi Bayesian untuk maksimalisasi-harapan, diinisialisasi oleh pengelompokan hierarkis untuk model campuran Gaussian berparameterisasi
Lima . Pengelompokan afinitas (AP), lihat http://dx.doi.org/10.1126/science.1136800
Enam . Statistik Gap untuk Memperkirakan Jumlah Cluster. Lihat juga beberapa kode untuk output grafis yang bagus . Mencoba 2-10 cluster di sini:
Inilah output dari implementasi statistik gap Edwin Chen:
Tujuh . Anda juga mungkin merasa berguna untuk mengeksplorasi data Anda dengan clustergram untuk memvisualisasikan penetapan cluster, lihat http://www.r-statistics.com/2010/06/clustergram-visualization-and-diagnostics-for-cluster-analysis-r- kode / untuk lebih jelasnya.
Delapan . The NbClust paket menyediakan 30 indeks untuk menentukan jumlah cluster dalam kumpulan data.
Jika pertanyaan Anda adalah
how can I produce a dendrogram to visualize the results of my cluster analysis
, maka Anda harus mulai dengan ini: http://www.statmethods.net/advstats/cluster.html http://www.r-tutor.com/gpu-computing/clustering/hierarchical-cluster-analysis http://gastonsanchez.wordpress.com/2012/10/03/7-ways-to-plot-dendrograms-in-r/ Dan lihat di sini untuk metode yang lebih eksotis: http://cran.r-project.org/ web / views / Cluster.htmlBerikut ini beberapa contoh:
Juga untuk data dimensi tinggi adalah
pvclust
pustaka yang menghitung nilai-p untuk pengelompokan hierarkis melalui resampling bootstrap multiskala. Inilah contoh dari dokumentasi (tidak akan bekerja pada data dimensi rendah seperti pada contoh saya):Apakah ada yang membantu?
sumber
R
paket (ada di GitHub saya - Anda dapat melihatnya); 3) solusi saya tampaknya bekerja cukup baik, ditambah, sudah lama dan saya sudah menyelesaikan perangkat lunak disertasi saya, laporan disertasi (tesis) dan saat ini saya sedang mempersiapkan pertahanan :-). Bagaimanapun, saya sangat menghargai komentar dan tautan Anda. Semua yang terbaik!Sulit untuk menambahkan sesuatu jawaban yang terlalu rumit. Meskipun saya merasa kita harus menyebutkannya di
identify
sini, terutama karena @Ben menunjukkan banyak contoh dendrogram.identify
memungkinkan Anda secara interaktif memilih cluster dari dendrogram dan menyimpan pilihan Anda ke daftar. Tekan Esc untuk meninggalkan mode interaktif dan kembali ke konsol R. Perhatikan, bahwa daftar itu berisi indeks, bukan rownames (berlawanan dengancutree
).sumber
Untuk menentukan k-cluster optimal dalam metode clustering. Saya biasanya menggunakan
Elbow
metode yang disertai oleh pemrosesan Paralel untuk menghindari pemulaan waktu. Kode ini dapat dicontoh seperti ini:Metode siku
Menjalankan Elbow parallel
Ini bekerja dengan baik.
sumber
Jawaban indah dari Ben. Namun saya terkejut bahwa metode Affinity Propagation (AP) telah di sini disarankan hanya untuk menemukan jumlah cluster untuk metode k-means, di mana secara umum AP melakukan pekerjaan yang lebih baik mengelompokkan data. Silakan lihat makalah ilmiah yang mendukung metode ini dalam Sains di sini:
Frey, Brendan J., dan Delbert Dueck. "Clustering dengan mengirimkan pesan antar titik data." sains 315.5814 (2007): 972-976.
Jadi jika Anda tidak bias terhadap k-means saya sarankan untuk menggunakan AP secara langsung, yang akan mengelompokkan data tanpa perlu mengetahui jumlah cluster:
Jika jarak euclidean negatif tidak sesuai, maka Anda dapat menggunakan langkah-langkah kesamaan lainnya yang disediakan dalam paket yang sama. Misalnya, untuk persamaan berdasarkan korelasi Spearman, inilah yang Anda butuhkan:
Harap dicatat bahwa fungsi-fungsi untuk kesamaan dalam paket AP hanya disediakan untuk kesederhanaan. Bahkan, fungsi apcluster () dalam R akan menerima matriks korelasi apa pun. Hal yang sama sebelumnya dengan corSimMat () dapat dilakukan dengan ini:
atau
tergantung pada apa yang ingin Anda klaster pada matriks Anda (baris atau cols).
sumber
Metode ini bagus, tetapi ketika mencoba mencari k untuk set data yang jauh lebih besar, ini bisa sangat lambat di R.
Solusi bagus yang saya temukan adalah paket "RWeka", yang memiliki implementasi efisien dari algoritma X-Means - versi tambahan dari K-Means yang memiliki skala yang lebih baik dan akan menentukan jumlah cluster yang optimal untuk Anda.
Pertama, Anda ingin memastikan bahwa Weka diinstal pada sistem Anda dan memiliki XMeans diinstal melalui alat manajer paket Weka.
sumber
Solusi sederhana adalah perpustakaan
factoextra
. Anda dapat mengubah metode pengelompokan dan metode untuk menghitung jumlah grup terbaik. Misalnya jika Anda ingin mengetahui jumlah cluster terbaik untuk k- berarti:Data: mtcars
Akhirnya, kita mendapatkan grafik seperti:
sumber
Jawabannya bagus. Jika Anda ingin memberikan kesempatan kepada metode pengelompokan lain, Anda dapat menggunakan pengelompokan hierarkis dan melihat bagaimana data terpecah.
Bergantung pada berapa kelas yang Anda butuhkan, Anda dapat memotong dendrogram sebagai;
Jika Anda mengetik,
?cutree
Anda akan melihat definisi. Jika kumpulan data Anda memiliki tiga kelas, itu akan menjadi sederhanacutree(hc.complete, k = 3)
. Setara dengancutree(hc.complete,k = 2)
adalahcutree(hc.complete,h = 4.9)
.sumber