是否有任何算法可以帮助进行层次聚类? Google 的 map-reduce 只有 k-clustering 的例子。在层次集群的情况下,我不确定如何在节点之间划分工作。 我找到的其他资源是:http://issues.apache.org/jira/browse/MAHOUT-19 但不清楚使用了哪些算法。
最佳答案
首先,您必须决定是要自下而上还是自上而下构建层次结构。
自下而上称为层次凝聚聚类。这是一个简单的、有据可查的算法:http://nlp.stanford.edu/IR-book/html/htmledition/hierarchical-agglomerative-clustering-1.html .
分布式自下而上的算法很棘手,因为每个分布式进程都需要整个数据集来选择合适的集群。它还需要当前级别的集群列表,因此它不会将数据点添加到同一级别的多个集群。
自上而下的层次结构称为 Divisive clustering . K-means是决定如何拆分层次结构节点的一种选择。本文着眼于用于节点拆分的 K-means 和主方向划分分区 (PDDP):http://scgroup.hpclab.ceid.upatras.gr/faculty/stratis/Papers/tm07book.pdf .最终只需要将每个父节点拆分成相对均衡的子节点即可。
自上而下的方法更易于分发。在您的第一个节点拆分之后,创建的每个节点都可以传送到分布式进程以再次拆分等等......每个分布式进程只需要知道它正在拆分的数据集的子集。只有父进程知道完整的数据集。
此外,每个拆分可以并行执行。 k-means 的两个例子:
关于algorithm - 分布式层次聚类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/84820/