如何进行大相似度矩阵的分层聚类

时间:2015-07-27 14:28:01

标签: machine-learning hierarchical-clustering unsupervised-learning

我有大约50K的数据集,其值可以在0到10之间。我想应用HAC来聚类这些数据。但是要应用HAC,我需要准备N * N相似度矩阵。

对于N = 50 K,这个矩阵太大而无法保留在内存中,即使我使用短。

有没有办法分批进行HAC或任何其他方法可以帮助我应用具有50K数据点的HAC。我计划在java中实现它。

我也担心会花费一些时间,任何关于此的指示都会非常有帮助。

2 个答案:

答案 0 :(得分:2)

如果您想应用自上而下的群集方法,可以轻松分发它,相关文章: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.

答案 1 :(得分:1)

有各种不同的HAC方法,但它们通常都受到O(n ^ 2)复杂性的限制。因此,尽管50k仍然是一个可行数量的数据点,但您将无法将其扩展到太远。

我不知道你正在使用什么代码,但你不必明确存储N ^ 2大小的相似性矩阵,可以根据需要动态计算相似性值。 Scikit学习将在没有明确形成矩阵的情况下完成。