如何以最少的内存使用对大量数据进行聚类
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³) 时间。这无法很好地扩展到大数据。
【讨论】:
你有什么建议?我只想要一个从向量列表创建集群的算法。我不想指定要形成的集群数量以上是关于如何以最少的内存使用对大量数据进行聚类的主要内容,如果未能解决你的问题,请参考以下文章