r - R中大数据的轮廓计算

标签 r memory cluster-analysis k-means silhouette

我想计算聚类评估的剪影。 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/

相关文章:

python - 如何处理聚类分析中的空值?

python - 如何绘制图形聚类系数的分布

r - 使用 DBSCAN 对 GPS 数据进行聚类,但聚类没有意义(就大小而言)

c++ - 对齐 SSBO 的内存(它是包含数组的结构数组)?

xml - 解析大型 PLIST 和内存占用

python - 运行后memmap文件在哪里?

matlab - 在 Matlab 中标记自组织 map 的绘图(已编辑)

r - 为什么 S4 继承在环境之间丢失?

R 使用日期和字符列的特定函数将多行折叠为 1 行

r - 在生存分析中计算AIC(survfit/coxph)