我在理解官方文档here中概述的sklearn.cluster.SpectralClustering类的特定用例时遇到了麻烦。假设我想使用自己的亲和力矩阵执行聚类。我首先实例化类SpectralClustering的对象,如下所示:

from sklearn.clustering import SpectralClustering

cl = SpectralClustering(n_clusters=5,affinity='precomputed')

上面的affinity参数的文档如下:



现在,对象cl具有方法fit,有关其唯一参数X的文档如下:



这就是令人困惑的地方。我正在使用自己的亲和力矩阵,其中的0表示两个点是相同的,数字越大表示两个点之间的相异性越高。但是,参数affinity的其他选择实际上是采用一个数据集并生成一个相似度矩阵,对于该矩阵,较高的值表示更多的相似性,而较低的值表示不相似(例如径向基核)。

因此,当在我的fit实例上使用SpectralClustering方法时,在将其亲和力矩阵作为参数fit传递给X方法调用之前,我真的需要将亲和力矩阵转换为相似性矩阵吗?同一文档页面上有关于将距离转换为行为相似的记录的注释,但未明确指出应在何处执行此步骤以及通过哪种方法调用。

最佳答案

直接来自文档:


np.exp(- X ** 2 / (2. * delta ** 2))

这在您自己的代码中进行,其结果可以传递给fit。出于此算法的目的,亲和度表示相似性,而不是距离。

关于python - 使用具有参数亲和力='precomputed'的类sklearn.cluster.SpectralClustering,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20530804/

10-10 23:56