我大约有5万个数据集,其值的范围可能在0到10之间。我想应用HAC对这些数据进行聚类。但是要应用HAC,我需要准备一个N * N相似度矩阵。
对于N = 50 K,即使我使用short,该矩阵也将太大而无法保存在内存中。
有什么方法可以批量进行HAC或任何其他可以帮助我将HAC应用于50K数据点的方法。我计划在Java中实现它。
我也担心总耗时,对此的任何指点都会很有帮助。
最佳答案
如果要应用自上而下的群集方法,则可以轻松分发它,相关文章:http://scgroup.hpclab.ceid.upatras.gr/faculty/stratis/Papers/tm07book.pdf
长话短说(从其他文章中引用):在拆分第一个节点之后,可以将创建的每个节点传送到分布式流程以再次拆分,依此类推...每个分布式流程只需要了解数据集的子集即可。它正在分裂。只有父进程知道完整的数据集。
自下而上的方法很难分发,在这里我不会尝试提出任何建议。
但是,您不需要自己用Java编写此代码,Mahout或MLLib库已经拥有它了,并且它们都支持Java。和hadoop
无论如何,如果您想自己编写以下示例,这是Java中的hadoop示例:
http://sujitpal.blogspot.ru/2009/09/hierarchical-agglomerative-clustering.html
最后,在比较不同的分布式集群聚类方法方面,一项出色而艰巨的工作:
C. F. Olson. "Parallel Algorithms for Hierarchical Clustering." Parallel Computing, 21:1313-1325, 1995, doi:10.1016/0167-8191(95)00017-I.