【问题标题】:Similarity Matrix / Hierarchical agglomerative clustering spark相似矩阵/分层凝聚聚类火花
【发布时间】:2018-04-10 10:04:12
【问题描述】:

我正在尝试实现基于相似度阈值的聚类方法。这个想法是为被认为相似的内容定义一个阈值并获得不同的集群。我拥有的数据包含 3 亿个条目。我一直在寻找 Apache Spark 来做这件事。然而,几个小时后,我的问题多于答案:

1- 在 Spark 中实现的所有方法 kmeans (https://spark.apache.org/docs/2.2.0/mllib-clustering.html) 都是基于 Vectors 的相似性,因此难以扩展到其他类型的对象。就我而言,我有一组对象,我想扩展定义两个独立对象如何相似的方法,同样,我们在 Java 中扩展函数 compare 来进行比较。那可能吗?谁能提供一个例子?在我看到的所有示例中,基本都是向量或使用 Word2Vector 转换为向量的句子。

2- Spark中所有的聚类方法都需要提前知道聚类个数K。有谁知道在 Spark 中工作的层次聚类的实现。

提前致以最诚挚的问候和感谢。

顺便说一句:我在 StackOverflow 中检查了很多人对这个主题感兴趣,但没有人给出完整的回复。

【问题讨论】:

    标签: apache-spark bigdata apache-spark-mllib hierarchical-clustering cosine-similarity


    【解决方案1】:

    成对操作一般无法扩展 - 这就是您在此处描述的内容。一个 300M x 300M 的相似度矩阵需要 3*10^8 * (3*10^8-1)/2 次操作 - 或 o(10^17)

    您需要将数据分解成小块,以便在小组之间进行成对比较。诀窍是 - 如何确保相似的条目最终出现在 same 小组中?有不同的方法可以实现这一点:一种是简单地具有集群的层次结构。其中一个已经内置到 spark 中的是 divisive bisecting kmeans: Hierarchical Agglomerative clustering in Spark

    另一种内置于 spark 的方法:对于一组新记录,您可以在每个聚类级别找到最接近的质心 - 然后在叶级别 在集群成员之间进行成对比较。这种方法需要在每个级别找到具有代表性的集群质心/原型

    【讨论】:

      猜你喜欢
      • 2018-04-29
      • 2016-10-01
      • 2020-01-23
      • 2015-01-07
      • 2023-03-12
      • 2020-11-30
      • 2017-08-06
      • 2014-06-28
      相关资源
      最近更新 更多