K均值聚类的内存问题

时间:2019-07-08 22:16:08

标签: r k-means

我正在尝试使用K表示聚类的搜索历史中的关键短语,但是当我运行stringdistmatrix()命令时遇到了“无法分配大小为30gb的向量”错误。我使用的数据集包括63455个唯一元素,因此生成的矩阵需要大约30gb的内存来处理。有没有办法降低过程的要求而又不会失去太多的意义?

如果您发现其他任何错误,则下面是我尝试运行的代码:

#Set data source, format for use, check consistency
MyData <- c('Create company email', 'email for business', 'free trial', 'corporate pricing', 'email cost')
summary(MyData)


#Define number of clusters
kclusters = round(0.90 * length(unique(MyData)))

#Compute distance between words
uniquedata <- unique(as.character(MyData))
distancemodels <- stringdistmatrix(uniquedata, uniquedata, method="jw")

#Create Dendrogram
rownames(distancemodels) <- uniquedata
hc <- hclust(as.dist(distancemodels))
par(mar = rep(2, 4))
plot(hc)

#Create clusters from grouped keywords
dfClust <- data.frame(uniquedata, cutree(hc, k=kclusters))
names(dfClust) <- c('data','cluster')
plot(table(dfClust$cluster))

#End view
view(dfClust)

1 个答案:

答案 0 :(得分:0)

我不知道有什么方法可以避免在进行k均值聚类时生成距离矩阵。

您可以考虑为避免内存问题而设计的替代群集算法。想到的主要对象是CLARA(群集大型应用程序; child-component-fragmet)。在R中,它就像cluster::clara一样简单,仅获取数字数据(如k均值),并要求您预先设置k

请特别阅读有关手册数量(?cluster::clara)的信息,您应将其设置为高于默认值。希望有帮助!

edit:刚注意到您实际上没有数字数据开始,所以也许CLARA并不是那么有用。您也许可以使用与CLARA相同的原理,包括多次采样数据以减少内存占用,并在以后合并结果。