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
:这是一个标准化的谱集群。引用
[3]Multiclass spectral clustering, 2003 Stella X. Yu, Jianbo Shi <https://people.eecs.berkeley.edu/~jordan/courses/281B-spring04/readings/yu-shi.pdf>
_[4][5][6]示例
>>> 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])