유사성 (diana, cluster R 패키지) 출력에서 ​​최적의 클러스터 수를 얻는 방법은 무엇입니까?

Aug 17 2020

다음과 같이 클러스터 패키지 및 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

그러나 내 데이터에는 결 측값이 없으므로 dissim 행렬의 가장 낮은 값은 동일한 요소에 대해 0이어야합니다 (mydata는 ~ 2000 요소, 11 개의 변수 임).

그런 다음 나는 dissim을 추정하려고 노력했다. 원본 데이터를 사용하고 유클리드 거리를 추정하여 비 유사성 행렬을 사용하지 않는 거리

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