如何以最少的内存使用对大量数据进行聚类

Posted

技术标签:

【中文标题】如何以最少的内存使用对大量数据进行聚类【英文标题】:How to cluster large amounts of data with minimal memory usage 【发布时间】:2020-02-12 06:17:00 【问题描述】:

我正在使用scipy.cluster.hierarchy.fclusterdata 函数对向量列表(具有 384 个分量的向量)进行聚类。

它工作得很好,但是当我尝试对大量数据进行聚类时,我的内存不足并且程序崩溃了。

如何在不耗尽内存的情况下执行相同的任务?

我的机器有 32GB 内存,Windows 10 x64,python 3.6(64 位)

【问题讨论】:

【参考方案1】:

你可以看看

DBSCAN(或其他基于密度的算法)以及相关的讨论:scikit-learn DBSCAN memory usage SLINK,层次聚类的一种变体(在sklearn.cluster.AgglomerativeClustering 中设置linkage='single') MiniBatch K Means 或BIRCH。

但是,您必须设置一些管道来测试不同数量的集群。不过,很难说哪种算法最适合您。

【讨论】:

【参考方案2】:

您需要选择不同的算法。

分层聚类需要 O(n²) 内存和教科书算法 O(n³) 时间。这无法很好地扩展到大数据。

【讨论】:

你有什么建议?我只想要一个从向量列表创建集群的算法。我不想指定要形成的集群数量

以上是关于如何以最少的内存使用对大量数据进行聚类的主要内容,如果未能解决你的问题,请参考以下文章

如何以最少的内存使用裁剪位图?

文本聚类算法介绍

如何在 Python 中对大量字典进行排序而不加载到内存中

如何高效地对大量数据进行分区? [关闭]

腾讯TMQ机器学习之一:聚类实战

腾讯TMQ机器学习之一:聚类实战