朋友的朋友聚类算法(Python)

Friends-of-friends clustering algorithm (Python)

我想在 Python 中实现一个“朋友的朋友”算法,其中,对于 N 维 space(二维,在我的情况),如果两个点比给定的链接长度更近,则称它们为“朋友”,并且朋友的朋友也是朋友(即,如果 A 是 B 的朋友,B 是 C 的朋友,则 A 是也是 C) 的朋友。然后,它们之间的所有朋友点都被收集到一个集群中,从而产生一些最终数量的集群。动机是我通常有很强的聚类点,不同的聚类彼此远离。我想在距离计算中允许任意度量(即,不一定是欧几里德度量)。

我可以从头开始写下来,但我想知道是否可以使用现有库或一些基于智能数组的智能数组轻松实现它Python。

您正在寻找的是具有单一链接的凝聚聚类(也称为层次聚类)。

凝聚聚类是一种算法,在该算法中,您从单个点开始通过合并它们来生成簇树。

链接参数定义了如何合并这些集群。单链接意味着在每个步骤中,您将合并两个集群,其点之间的最小距离是所有集群对中最小的。然后您可以选择一个截止点,从而得到您所要求的结果。

它在scikit-learn中实现,您可以使用许多距离度量或提供自定义距离矩阵。

https://scikit-learn.org/stable/modules/generated/sklearn.cluster.AgglomerativeClustering.html