我想在Python中实现一个"朋友的朋友";算法,其中,对于N维空间(在我的情况下是二维的(中的一组点,两个点被称为"点";朋友";如果它们比给定的链接长度更近,并且朋友的朋友也是朋友(即,如果a是B的朋友并且B是C的朋友,则a也是C的朋友(。然后,所有在它们之间是朋友的点都被收集到一个单独的聚类中,从而产生一些最终数量的聚类。动机是,我通常有强聚集点,不同的簇彼此相距很远。我想在距离计算中允许任意度量(即,不一定是欧几里得度量(。
我可以从头开始写,但我想知道它是否可以使用现有的库或一些基于智能阵列的Python轻松实现。
您正在寻找的是具有单个链接的聚集聚类(也称为层次聚类(。
聚集聚类是一种算法,通过从单个点开始合并聚类来生成聚类树。
linkage参数定义了如何合并这些簇。单链接意味着在每一步中,您将合并两个簇,它们的点之间的最小距离是所有簇对中最小的。然后你可以选择一个截止点,从而达到你的要求。
它在scikit-learn中实现,您可以使用许多距离度量或提供自定义距离矩阵。
https://scikit-learn.org/stable/modules/generated/sklearn.cluster.AgglomerativeClustering.html