spectral_clustering#

sklearn.cluster.spectral_clustering(affinity, *, n_clusters=8, n_components=None, eigen_solver=None, random_state=None, n_init=10, eigen_tol='auto', assign_labels='kmeans', verbose=False)[源代码]#

将集群应用于规范化拉普拉斯的投影。

在实践中,当单个集群的结构高度非凸时,或者更一般地,当集群的中心和扩展的测量值不适合描述完整集群时,谱集群非常有用。例如,当集群在2D平面上嵌套圆形时。

如果亲和力是图的邻近矩阵,则可以使用此方法来寻找规范化的图切割 [1], [2].

阅读更多的 User Guide .

参数:
affinity形状(n_samples,n_samples)的{类数组,稀疏矩阵}

描述要嵌入的样本关系的亲和力矩阵。 Must be symmetric .

可能的例子:
  • 图的邻近矩阵,

  • 样本成对距离矩阵的热核,

  • 样本的对称k近邻连通性矩阵。

n_clustersint,默认=无

要提取的集群数量。

n_componentsint,默认=n_clusters

用于谱嵌入的特征量。

eigen_solver{None、“arpack”、“lobpcg”或“amg”}

特征值分解方法。如果没有,那么 'arpack' 采用了看到 [4] 有关的更多详细信息 'lobpcg' .特征解算器 'amg' 运行 'lobpcg' 具有可选的Algestion MultiGrid预处理,并要求安装pyamg。它可以在非常大的稀疏问题上更快 [6][7].

random_stateint,RandomState实例,默认=无

伪随机数生成器,用于初始化lobpcg特征量分解,当 eigen_solver == 'amg' ,以及K-Means初始化。使用int使结果在调用之间具有确定性(请参阅 Glossary ).

备注

当使用 eigen_solver == 'amg' ,也有必要用来修复全球麻木的种子 np.random.seed(int) 以获得确定性结果。欲了解更多信息,请访问https://github.com/pyamg/pyamg/issues/139。

n_initint,默认值=10

k-means算法将在不同的重心种子下运行的次数。就惯性而言,最终结果将是n_initit连续运行的最佳输出。仅在以下情况下使用 assign_labels='kmeans' .

eigen_tolfloat,default=“auto”

拉普拉斯矩阵特征分解的停止准则。如果 eigen_tol="auto" 那么通过的公差将取决于 eigen_solver :

  • 如果 eigen_solver="arpack" 那么 eigen_tol=0.0 ;

  • 如果 eigen_solver="lobpcg"eigen_solver="amg" 那么 eigen_tol=None 它配置了底层 lobpcg 解算器根据其几何学自动解析值。看, scipy.sparse.linalg.lobpcg 有关详细信息

请注意,使用时 eigen_solver="lobpcg"eigen_solver="amg"tol<1e-5 可能会导致趋同问题,应该避免。

Added in version 1.2: 添加了“自动”选项。

assign_labels' kmeans ','离散','集群_qr ',默认=' kmeans '

用于在嵌入空间中分配标签的策略。 拉普拉斯嵌入后有三种方法可以分配标签。 可以应用k-means,并且是一个流行的选择。但它也可能对初始化很敏感。离散化是另一种对随机初始化不太敏感的方法 [3]. 集群_qr方法 [5] 直接从谱集群中的特征载体中提取集群。与k-means和离散化相反,集群_qr没有调整参数,也不是迭代方法,但在质量和速度方面可能优于k-means和离散化。有关集群策略的详细比较,请参阅以下示例: 按地区划分希腊硬币的图片 .

在 1.1 版本发生变更: 添加了新的标签方法“集群_qr”。

verbose布尔,默认=假

冗长模式。

Added in version 0.24.

返回:
labels整组,形状:n_samples

集群的标签。

注意到

该图应该只包含一个相连的分量,其他地方的结果没有什么意义。

该算法解决了标准化切割 k=2 :这是一个标准化的谱集群。

引用

示例

>>> import numpy as np
>>> from sklearn.metrics.pairwise import pairwise_kernels
>>> from sklearn.cluster import spectral_clustering
>>> X = np.array([[1, 1], [2, 1], [1, 0],
...               [4, 7], [3, 5], [3, 6]])
>>> affinity = pairwise_kernels(X, metric='rbf')
>>> spectral_clustering(
...     affinity=affinity, n_clusters=2, assign_labels="discretize", random_state=0
... )
array([1, 1, 1, 0, 0, 0])