Bagaimana cara mendapatkan jumlah cluster optimal dari keluaran dissimilarity (diana, cluster R package)?
Saya mencoba untuk mendapatkan jumlah cluster optimal dari dendrogram yang diperoleh dengan paket cluster dan metode diana (menggunakan ketidaksamaan euclidean) dengan yang berikut:
mydatad <- diana(mydata, stand = FALSE)
mydata_dend <- fviz_dend(mydatad, cex = 0.5, k = 2, palette = "jco")
## use factoextra and ggplot2 for visualization
kemudian saya mencoba menggunakan matriks ketidaksamaan dengan NbClust:
NC <- NbClust(data = NULL, diss = mydatadd, distance = NULL, min.nc = 2, max.nc = 50, method= "single", index = "silhouette")
dan saya mendapatkan pesan kesalahan ini ":
Error in if (is.na(n) || n > 65536L) stop("size cannot be NA nor exceed 65536") :
missing value where TRUE/FALSE needed
Namun data saya tidak memiliki nilai yang hilang, nilai terendah dalam matriks disim harus 0 untuk elemen identik (mydata adalah ~ 2000 elemen, 11 variabel).
Kemudian saya mencoba memperkirakan perbedaan tersebut. jarak menggunakan data asli dan mengestimasi jarak euclidean, sehingga tidak menggunakan matriks disimilaritas
NC <- NbClust(T2141d, diss = NULL, distance = "euclidean", min.nc = 2, max.nc = 50, method= "single", index = "silhouette")
dan saya mendapatkan pesan kesalahan berikut:
Error in t(jeu) %*% jeu :
requires numeric/complex matrix/vector arguments
setiap saran diterima, bahkan saran untuk metode yang berbeda untuk mendapatkan jumlah cluster yang optimal. terima kasih.
Jawaban
The NbClust
Fungsi membutuhkan matriks perbedaan. Saat Anda menjalankan diana
, objek yang dikembalikan bukanlah matriks ketidaksamaan, meskipun telah dihitung. Anda perlu mengatur keep.diss=TRUE
. Sebelum saya menunjukkan cara mengembalikan matriks ketidaksamaan menggunakan contoh dataset:
library(factoextra)
library(cluster)
mydata=data.frame(matrix(runif(2000*11),ncol=11))
mydatad <- diana(mydata, stand = FALSE,keep.diss=TRUE)
# check the dissimilarity matrix stored
class(mydatad$diss) [1] "dissimilarity" "dist" NC <- NbClust(data = NULL, diss = mydatad$diss,
distance = NULL, min.nc = 2, max.nc = 50,
method= "single", index = "silhouette")