วิธีรับจำนวนคลัสเตอร์ที่เหมาะสมที่สุดจากเอาต์พุตที่ไม่เหมือนกัน (diana, cluster R package)

Aug 17 2020

ฉันกำลังพยายามหาจำนวนคลัสเตอร์ที่เหมาะสมที่สุดจาก dendrogram ที่ได้รับจากแพ็คเกจคลัสเตอร์และวิธีการของ diana (ใช้ความแตกต่างแบบยูคลิด) ดังต่อไปนี้

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

ยินดีรับข้อเสนอแนะแม้กระทั่งคำแนะนำสำหรับวิธีการต่างๆเพื่อให้ได้จำนวนคลัสเตอร์ที่เหมาะสมที่สุด ขอบคุณ

คำตอบ

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