K 均值聚类的内存问题

Memory issue with K-means clustering

我正在尝试使用 K 均值聚类对搜索历史记录中的关键短语进行聚类,但是当我 运行 stringdistmatrix() 命令时,我 运行 进入了错误 "cannot allocate vector of size 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)

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

您可以考虑为避免内存问题而设计的替代聚类算法。想到的主要一个是 CLARA(集群大型应用程序;Kaufman and Rousseeuw 1990)。在 R 中,它就像 cluster::clara 一样简单,仅获取数字数据(如 k-means)并要求您提前设置 k

阅读手册 (?cluster::clara),尤其是关于您应该设置高于默认值的样本数。希望对您有所帮助!

编辑:刚刚注意到您实际上并没有数字数据作为开始,所以 CLARA 可能并不是那么有用。您或许可以使用与 CLARA 相同的一些原则,包括对数据进行多次采样以减少内存占用以及稍后合并结果。