相似矩阵/层次凝聚聚类火花

时间:2017-10-29 08:08:40

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

我试图基于相似性阈值实现聚类方法。我们的想法是为被认为相似的东西定义一个阈值并获得不同的集群。我拥有的数据包含3亿条记录。我一直在寻找 Apache Spark 这样做。然而,几个小时后,我的问题多于答案:

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

2- Spark中的所有聚类方法都需要事先知道聚类的数量 K 。有谁知道在Spark中有效的分层聚类的实现。

最好的问候和提前感谢。

BTW:我已经检查过很多人对StackOverflow中的这个主题感兴趣,但是没有人产生完整的响应。

1 个答案:

答案 0 :(得分:1)

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

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

是已经内置的火花之一

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