分布式层次聚类
Posted
技术标签:
【中文标题】分布式层次聚类【英文标题】:Distributed hierarchical clustering 【发布时间】:2010-09-10 05:36:30 【问题描述】:是否有任何算法可以帮助进行层次聚类? Google 的 map-reduce 只有一个 k-clustering 的例子。在层次聚类的情况下,我不确定如何在节点之间划分工作。 我发现的其他资源是:http://issues.apache.org/jira/browse/MAHOUT-19 但不清楚使用了哪些算法。
【问题讨论】:
【参考方案1】:首先,您必须决定是自下而上还是自上而下构建层次结构。
自下而上称为分层凝聚聚类。这是一个简单的、有据可查的算法:http://nlp.stanford.edu/IR-book/html/htmledition/hierarchical-agglomerative-clustering-1.html。
分发自下而上的算法很棘手,因为每个分布式进程都需要整个数据集来选择合适的集群。它还需要当前级别的集群列表,因此它不会将数据点添加到同一级别的多个集群。
自上而下的层次结构称为Divisive clustering。 K-means 是决定如何拆分层次结构节点的一种选择。本文着眼于用于节点分裂的 K-means 和 Principal Direction Divisive Partitioning (PDDP):http://scgroup.hpclab.ceid.upatras.gr/faculty/stratis/Papers/tm07book.pdf。最后只需要将每个父节点拆分成比较均衡的子节点即可。
自上而下的方法更易于分发。在您的第一个节点拆分后,创建的每个节点都可以运送到分布式进程以再次拆分,依此类推......每个分布式进程只需要知道它正在拆分的数据集的子集。只有父进程知道完整的数据集。
此外,每个拆分都可以并行执行。 k-means 的两个例子:
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.101.1882&rep=rep1&type=pdf http://www.ece.northwestern.edu/~wkliao/Kmeans/index.html。【讨论】:
你知道任何分布式分层凝聚聚类吗? 查找 renewed link 以获取 Manasi N. Joshi 先生在该主题上的工作。【参考方案2】:您还可以看到 Newman 和 Girvan 的 Finding and evaluating community structure in networks,他们提出了一种评估网络中社区的方法(以及基于此方法的一组算法)和衡量网络划分为社区质量的方法(图模块化)。
【讨论】:
【参考方案3】:如果review by Olson (1995) 有点过时,请查看这篇非常易读的文章。从那时起,大多数论文都需要付费才能访问。 :-)
如果您使用 R,我建议您尝试使用 pvclust,它使用另一个 R 模块 snow 实现并行性。
【讨论】:
【参考方案4】:Clark Olson 回顾了几种用于层次聚类的分布式算法:
C. F.奥尔森。 “并行算法 层次聚类。” 并行 计算,21:1313-1325,1995,doi:10.1016/0167-8191(95)00017-I。
帕鲁纳克等人。描述一种算法,灵感来自蚂蚁如何对它们的巢穴进行排序:
H.范·戴克·帕鲁纳克,理查德·罗威尔, 西奥多·C·贝尔丁和斯文 布鲁克纳:“动态去中心化 任何时间层次聚类。”在 过程。第四届工程自组织系统国际研讨会 (ESOA), 2006, doi:10.1007/978-3-540-69868-5
【讨论】:
【参考方案5】:您可以查看自组织映射(Kohonen 的神经网络方法)所做的一些工作......Vienna University of Technology 的人已经在他们不断增长的分层映射算法的分布式计算方面做了一些工作。
这有点在你的聚类问题的边缘,所以它可能没有帮助,但我想不出更接近的东西;)
【讨论】:
以上是关于分布式层次聚类的主要内容,如果未能解决你的问题,请参考以下文章