असमानता (डायना, क्लस्टर आर पैकेज) आउटपुट से क्लस्टर की इष्टतम संख्या कैसे प्राप्त करें?

Aug 17 2020

मैं निम्नलिखित पैकेज के साथ क्लस्टर पैकेज और डायना विधि (यूक्लिडियन डिसमिलरिटी) के साथ प्राप्त डेंड्रोग्राम से क्लस्टर्स की इष्टतम संख्या प्राप्त करने की कोशिश कर रहा हूं:

mydatad <- diana(mydata, stand = FALSE)
mydata_dend <- fviz_dend(mydatad, cex = 0.5, k = 2, palette = "jco") 
## use factoextra and ggplot2 for visualization

तब मैं NbClust के साथ असमानता मैट्रिक्स का उपयोग करने की कोशिश करता हूं:

NC <- NbClust(data = NULL, diss = mydatadd, distance = NULL, min.nc = 2, max.nc = 50, method= "single", index = "silhouette")

और मुझे यह त्रुटि संदेश प्राप्त हुआ ":

Error in if (is.na(n) || n > 65536L) stop("size cannot be NA nor exceed 65536") : 
  missing value where TRUE/FALSE needed

हालाँकि, मेरे डेटा में कोई अनुपलब्ध मूल्य नहीं हैं, असंतुष्ट मैट्रिक्स में निम्नतम मान समान तत्वों के लिए 0 होना चाहिए (mydata ~ 2000 तत्व, 11 चर)।

फिर मैंने असहमति का अनुमान लगाने की कोशिश की। मूल डेटा का उपयोग करके दूरी और यूक्लिडियन दूरी का अनुमान लगाना, इस प्रकार असमानता मैट्रिक्स का उपयोग नहीं करना

NC <- NbClust(T2141d, diss = NULL, distance = "euclidean", min.nc = 2, max.nc = 50, method= "single", index = "silhouette")

और मुझे निम्नलिखित त्रुटि संदेश मिलता है:

Error in t(jeu) %*% jeu : 
  requires numeric/complex matrix/vector arguments

किसी भी सुझाव का स्वागत है, यहां तक ​​कि क्लस्टर की इष्टतम संख्या प्राप्त करने के लिए विभिन्न तरीकों के लिए सुझाव। thnx

जवाब

1 StupidWolf Aug 17 2020 at 01:08

NbClustसमारोह एक विषमताओं मैट्रिक्स की आवश्यकता है। जब आप चलते हैं diana, तो दी गई वस्तु एक असमानता मैट्रिक्स नहीं है, हालांकि इसकी गणना की गई थी। आपको सेट करने की आवश्यकता है keep.diss=TRUE। इससे पहले कि मैं दिखाऊं कि कैसे एक उदाहरण डाटासेट का उपयोग करके असमानता मैट्रिक्स को वापस करें:

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")