使用参数 affinity='precomputed' 的类 sklearn.cluster.SpectralClustering
Posted
技术标签:
【中文标题】使用参数 affinity=\'precomputed\' 的类 sklearn.cluster.SpectralClustering【英文标题】:Using the class sklearn.cluster.SpectralClustering with parameter affinity='precomputed'使用参数 affinity='precomputed' 的类 sklearn.cluster.SpectralClustering 【发布时间】:2013-12-30 02:45:08 【问题描述】:我无法理解官方文档here 中概述的sklearn.cluster.SpectralClustering
类的特定用例。假设我想使用自己的亲和矩阵来执行聚类。我首先实例化一个SpectralClustering
类的对象,如下所示:
from sklearn.clustering import SpectralClustering
cl = SpectralClustering(n_clusters=5,affinity='precomputed')
上面affinity
参数的文档如下:
affinity : 字符串,类数组或可调用,默认为'rbf'
如果是字符串,这可能是“nearest_neighbors”、“precomputed”、“rbf”之一或 sklearn.metrics.pairwise_kernels 支持的内核之一。 仅应使用产生相似性分数(随相似性增加的非负值)的内核。聚类算法不检查此属性。
现在对象cl
有一个方法fit
,关于其唯一参数X
的文档如下:
X : 类数组或稀疏矩阵,形状 (n_samples, n_features)
或者,如果 affinity==
precomputed
,则预先计算的形状为 (n_samples, n_samples) 的相似性矩阵
这是令人困惑的地方。我正在使用我自己的亲和度矩阵,其中 0 表示两个点相同,数字越大表示两个点越不相似。然而,参数affinity
的其他选择实际上采用一个数据集并生成一个相似度矩阵,其中较高值表示更多相似度,而较低的 值表示不相似(例如径向基核)。
因此,当在我的SpectralClustering
实例上使用fit
方法时,我是否真的需要将我的亲和矩阵转换为相似矩阵,然后再将其作为参数fit
方法调用X
?同一文档页面记录了将距离转换为行为良好的相似性,但没有明确指出应该在哪里执行此步骤,以及通过哪个方法调用。
【问题讨论】:
【参考方案1】:直接来自文档:
如果您有一个相似度矩阵,例如距离矩阵,其中 0 表示相同的元素,而高值表示非常不同的元素,则可以通过应用高斯将其转换为非常适合算法的相似度矩阵(RBF,热)内核:
np.exp(- X ** 2 / (2. * delta ** 2))
这在你自己的代码中,结果可以传递给fit
。就本算法而言,相似度意味着相似性,而不是距离。
【讨论】:
谢谢 - 我注意到了 sn-p,但被这个措辞所吸引,即相似性意味着相似性,而不是距离。以上是关于使用参数 affinity='precomputed' 的类 sklearn.cluster.SpectralClustering的主要内容,如果未能解决你的问题,请参考以下文章