2013-03-13 28 views
2

我有一个包含62列和181408行的矩阵,我将使用k均值聚类。我理想上喜欢的是一种确定最佳群集数量的方法。我尝试过使用集群包中的clusGap(下面的可重现代码)实现差距统计技术,但是这会产生几个与Windows中的向量大小(122 GB)和memory.limit问题有关的错误消息,以及OS X中的“Error in dist(xs) : negative length vectors are not allowed” 。有没有人有任何建议,可用于确定具有大型数据集的最佳群集数量的技术?或者,或者,如何让我的代码功能(并且不需要几天时间完成)?谢谢。确定具有大数据集的k均值的最佳聚类数

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 2013-03-13 03:33:32

回答

1

在62级的尺寸,其结果将可能是无意义由于诅咒维度的。

k-means做一个最小SSQ分配,这在技术上等于最小化平方欧几里得距离。然而,欧几里得距离已知对于高维数据不适用。

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或4,即
enter image description here

从1到3个集群移动时有一个明显的下降“基团内的平方和的”。在三个群集之后,这种下降趋势下降,这表明3群集解决方案可能非常适合数据。

但是就像Anony-Mouse指出的那样,维度的诅咒因为欧几里德距离被用在k中而产生影响。
我希望这个答案能在一定程度上帮助你。