使用带参数affinity ='precomputed'的类sklearn.cluster.SpectralClustering

时间:2013-12-11 21:59:52

标签: python cluster-analysis scikit-learn

我无法理解官方文档here中概述的sklearn.cluster.SpectralClustering类的特定用例。假设我想使用自己的亲和矩阵来执行聚类。我首先实例化一个类SpectralClustering的对象,如下所示:  

from sklearn.clustering import SpectralClustering

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

上面affinity参数的文档如下:

  

affinity:string,array-like或callable,默认为'rbf'

     

如果是字符串,则可能是“nearest_neighbors”,“precomputed”,“rbf”或sklearn.metrics.pairwise_kernels支持的某个内核之一。   只应使用产生相似性得分的内核(非相似性增加的负值)。聚类算法不会检查此属性。

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

  

X:类似数组或稀疏矩阵,形状(n_samples,n_features)

     

OR,如果亲和力== precomputed,则为预先计算的形状亲和度矩阵(n_samples,n_samples)

这是令人困惑的地方。我使用自己的亲和力矩阵,其中度量为0表示两个点相同,数字越大意味着两个点更不相似。但是,参数affinity的其他选项实际上采用数据集并生成相似性矩阵,其中更高值表示更多相似性,并且< em> lower 值表示不相似(例如径向基核)。

因此,在我的fit实例上使用SpectralClustering方法时,我是否真的需要将亲和度矩阵转换为相似度矩阵,然后再将其传递给fit方法调用参数X?相同的文档页面记录了将距离转换为行为良好的相似性,但未明确指出应该执行此步骤的位置,以及通过哪种方法调用。

1 个答案:

答案 0 :(得分:5)

直接来自文档:

  

如果您有一个亲和度矩阵,例如距离矩阵,其中0表示相同的元素,而高值表示非常不相似的元素,则可以通过应用高斯的方法将其转换为非常适合算法的相似性矩阵(RBF,热)内核:

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

这是您自己的代码,其结果可以传递给fit。出于此算法的目的,亲和力意味着相似性,而不是距离。