2013-03-13 1 views
2

나는 k- 평균을 사용하여 클러스터링하려고하는 62 개의 열과 181408 개의 행을 가지고 있습니다. 내가 이상적으로 생각하는 것은 최적의 클러스터 수를 알아내는 방법입니다. 나는 아래의 클러스터 패키지 (재현 가능한 코드)에서 clusGap을 사용하여 간격 통계 기법을 구현하려고 시도했으나 Windows (122GB) 및 memory.limit 문제 (OS X의 "Error in dist(xs) : negative length vectors are not allowed")와 관련된 몇 가지 오류 메시지를 생성합니다. 누가 대규모 데이터 세트로 최적의 클러스터 수를 결정할 수있는 기술에 대한 제안을 갖고 있습니까? 아니면, 내 코드 기능을 만드는 방법 (그리고 완료하는 데 며칠이 걸리지 않습니까?) 감사.큰 데이터 세트로 k-means에 대한 최적의 클러스터 수 결정

library(cluster) 
inputdata<-matrix(rexp(11247296, rate=.1), ncol=62) 
clustergap <- clusGap(inputdata, FUN=kmeans, K.max=12, B=10) 
+0

빅 데이터에 관한 kmeans에 대한 질문 중 두 번째 부분과 관련이 있습니다. http://stackoverflow.com/q/6372397/1036500 – Ben

답변

1

62 개 차원에서, 결과는 가능성 때문에 차원의 저주 을 의미 할 것이다.

k-means는 최소한 SSQ 할당을 수행합니다. 이는 기술적으로는 유클리드 거리의 제곱을 최소화하는 것과 같습니다. 그러나 유클리드 거리 (Euclidean distance)는 고차원 데이터에서 잘 작동하지 않는 것으로 알려져 있습니다.

0

이것은 RBloggers의 것입니다. https://www.r-bloggers.com/k-means-clustering-from-r-in-action/

는 다음을 수행 할 수 있습니다 :

data(wine, package="rattle") 
head(wine) 
df <- scale(wine[-1]) 
wssplot <- function(data, nc=15, seed=1234){ 
      wss <- (nrow(data)-1)*sum(apply(data,2,var)) 
      for (i in 2:nc){ 
       set.seed(seed) 
       wss[i] <- sum(kmeans(data, centers=i)$withinss)} 
      plot(1:nc, wss, type="b", xlab="Number of Clusters", 
       ylab="Within groups sum of squares")} 

wssplot(df) 

이이 같은 플롯을 생성합니다. 이에서
당신이 K의 값으로 선택할 수 있습니다 3, 즉
enter image description here

1 ~ 3 클러스터 이동할 때 명확한 가을 '사각형의 그룹 내 합'에있다 (4). 3 개의 클러스터를 사용하면이 감소가 줄어들어 3 클러스터 솔루션이 데이터에 적합 할 수 있음을 알 수 있습니다.

Anony-Mouse가 지적한 것처럼, 차원의 저주는 k에서 유클리드 거리가 사용된다는 사실 때문에 영향을받습니다.
이 답변으로 어느 정도 도움이되기를 바랍니다.

관련 문제