我想计算聚类评估的剪影。 R 中有一些包,例如 cluster 和 clValid。这是我使用集群包的代码:
# load the data
# a data from the UCI website with 434874 obs. and 3 variables
data <- read.csv("./data/spatial_network.txt",sep="\t",header = F)
# apply kmeans
km_res <- kmeans(data,20,iter.max = 1000,
nstart=20,algorithm="MacQueen")
# calculate silhouette
library(cluster)
sil <- silhouette(km_res$cluster, dist(data))
# plot silhouette
library(factoextra)
fviz_silhouette(sil)
该代码适用于较小的数据,比如具有 50,000 obs 的数据,但是当数据有点大时,我会收到类似“错误:无法分配大小为 704.5 Gb 的向量”的错误。这可能是 Dunn 索引和大型数据集的其他内部索引的问题。
我的电脑有 32GB 内存。问题来自于计算 dist(data)。我想知道是否可以不预先计算 dist(data) ,并在轮廓公式中需要时计算相应的距离。
非常感谢您就此问题以及我如何计算大型和超大型数据集的剪影提供的帮助。
最佳答案
您可以自己实现 Silhouette。
它只需要每个距离两次,因此不需要存储整个距离矩阵。它可能运行得有点慢,因为它计算了两次距离,但同时更好的内存效率可能会弥补这一点。
不过还需要很长时间。
您应该考虑只使用一个子样本(您真的需要考虑所有点吗?)以及简化轮廓等替代方案,尤其是使用 KMeans...您只会获得很少的 yield 有关此类方法的额外数据。所以你可以只使用一个子样本。
关于r - R中大数据的轮廓计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54785525/