R_U*_*ser 6 python cluster-analysis scikit-learn
我无法理解的具体使用情况sklearn.cluster.SpectralClustering作为官方文档中列出类在这里.假设我想使用自己的亲和矩阵来执行聚类.我首先实例化一个类的对象,SpectralClustering如下所示:
from sklearn.clustering import SpectralClustering
cl = SpectralClustering(n_clusters=5,affinity='precomputed')
Run Code Online (Sandbox Code Playgroud)
上述affinity参数的文档如下:
affinity:string,array-like或callable,默认为'rbf'
如果是字符串,则可以是"nearest_neighbors","precomputed","rbf"或sklearn.metrics.pairwise_kernels支持的某个内核之一.只应使用产生相似性得分的内核(非相似性增加的负值).群集算法不会检查此属性.
现在该对象cl有一个方法fit,其唯一参数的文档X如下:
X:类似数组或稀疏矩阵,形状(n_samples,n_features)
OR,如果affinity ==,则为
precomputed预先计算的形状亲和度矩阵(n_samples,n_samples)
这是令人困惑的地方.我正在使用我自己的亲和度矩阵,其中度量为0表示两个点相同,数字越大意味着两个点更不相似.然而,参数的其他选择affinity实际上采用数据集并产生相似性矩阵,其中较高的值表示更多的相似性,而较低的值表示不相似性(例如径向基础核).
因此,当fit在我的实例上使用该方法时,我SpectralClustering是否真的需要将亲和度矩阵转换为相似性矩阵,然后将其fit作为参数传递给方法调用X?相同的文档页面记录了将距离转换为行为良好的相似性,但未明确指出应该执行此步骤的位置,以及通过哪种方法调用.
直接来自文档:
如果您有一个亲和度矩阵,例如距离矩阵,其中0表示相同的元素,而高值表示非常不同的元素,则可以通过应用高斯(RBF,)将其转换为非常适合算法的相似性矩阵.内核:
np.exp(- X ** 2 / (2. * delta ** 2))
Run Code Online (Sandbox Code Playgroud)
这将在您自己的代码中进行,并且可以将结果传递给您fit.出于该算法的目的,亲和力意味着相似性,而不是距离.