SpectralClustering#
- class sklearn.cluster.SpectralClustering(n_clusters=8, *, eigen_solver=None, n_components=None, random_state=None, n_init=10, gamma=1.0, affinity='rbf', n_neighbors=10, eigen_tol='auto', assign_labels='kmeans', degree=3, coef0=1, kernel_params=None, n_jobs=None, verbose=False)[source]#
将聚类应用于归一化拉普拉斯算子的投影。
在实践中,当单个簇的结构高度非凸时,或者更一般地,当簇的中心和扩散度量不适合描述完整簇时(例如簇是2D平面上的嵌套圆),谱聚类非常有用。
如果亲和矩阵是图的邻接矩阵,此方法可用于查找归一化图割[1], [2]。
调用
fit
时,亲和矩阵是使用核函数(例如具有欧几里得距离d(X, X)
的高斯(也称 RBF)核)构建的np.exp(-gamma * d(X,X) ** 2)
或者k-最近邻连接矩阵。
另外,可以通过设置
affinity='precomputed'
来指定用户提供的亲和矩阵。请在 用户指南 中阅读更多内容。
- 参数:
- n_clustersint, 默认=8
投影子空间的维度。
- eigen_solver{'arpack', 'lobpcg', 'amg'}, 默认=None
要使用的特征值分解策略。AMG 需要安装 pyamg。它在非常大、稀疏的问题上可能更快,但也可能导致不稳定。如果为 None,则使用
'arpack'
。有关'lobpcg'
的更多详细信息,请参见 [4]。- n_componentsint, 默认=None
用于谱嵌入的特征向量数量。如果为 None,则默认为
n_clusters
。- random_stateint, RandomState 实例, 默认=None
伪随机数生成器,用于当
eigen_solver == 'amg'
时 lobpcg 特征向量分解的初始化,以及 K-Means 初始化。使用 int 值可使结果在多次调用中保持确定性(参见 词汇表)。注意
当使用
eigen_solver == 'amg'
时,还需要使用np.random.seed(int)
来固定全局 numpy 种子以获得确定性结果。有关更多信息,请参见 pyamg/pyamg#139。- n_initint, 默认=10
k-means 算法将使用不同质心种子运行的次数。最终结果将是 n_init 次连续运行中惯性最佳的输出。仅当
assign_labels='kmeans'
时使用。- gammafloat, 默认=1.0
rbf、poly、sigmoid、laplacian 和 chi2 核的核系数。对于
affinity='nearest_neighbors'
、affinity='precomputed'
或affinity='precomputed_nearest_neighbors'
则忽略。- affinitystr 或 callable, 默认='rbf'
- 如何构建亲和矩阵。
'nearest_neighbors':通过计算最近邻图来构建亲和矩阵。
'rbf':使用径向基函数(RBF)核构建亲和矩阵。
'precomputed':将
X
解释为预计算的亲和矩阵,其中较大的值表示实例之间具有更大的相似性。'precomputed_nearest_neighbors':将
X
解释为预计算距离的稀疏图,并从每个实例的n_neighbors
最近邻中构建一个二元亲和矩阵。pairwise_kernels
支持的其中一个核。
只应使用产生相似度分数(非负值且随相似度增加)的核。聚类算法不检查此属性。
- n_neighborsint, 默认=10
使用最近邻方法构建亲和矩阵时使用的邻居数量。对于
affinity='rbf'
忽略。- eigen_tolfloat, 默认="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
的值可能导致收敛问题,应避免使用。1.2 版本新增: 添加了“auto”选项。
- assign_labels{'kmeans', 'discretize', 'cluster_qr'}, 默认='kmeans'
嵌入空间中的标签分配策略。在拉普拉斯嵌入后,有两种方式分配标签。k-means 是一种流行的选择,但它对初始化敏感。离散化是另一种对随机初始化不那么敏感的方法 [3]。cluster_qr 方法 [5] 直接从谱聚类中的特征向量中提取簇。与 k-means 和离散化相比,cluster_qr 没有调优参数,也不运行迭代,但在质量和速度方面都可能优于 k-means 和离散化。
1.1 版本变化: 新增了标签分配方法“cluster_qr”。
- degreefloat, 默认=3
多项式核的次数。其他核忽略此参数。
- coef0float, 默认=1
多项式和 Sigmoid 核的零系数。其他核忽略此参数。
- kernel_paramsdict of str to any, 默认=None
作为可调用对象传递的核的参数(关键字参数)和值。其他核忽略此参数。
- n_jobsint, 默认=None
当
affinity='nearest_neighbors'
或affinity='precomputed_nearest_neighbors'
时,要并行运行的作业数。邻居搜索将并行完成。None
表示 1,除非在joblib.parallel_backend
上下文。-1
表示使用所有处理器。有关更多详细信息,请参见 词汇表。- verbosebool, 默认=False
详细模式。
0.24 版本新增。
- 属性:
另请参阅
sklearn.cluster.KMeans
K-Means 聚类。
sklearn.cluster.DBSCAN
基于密度的带噪声空间聚类。
备注
一个距离矩阵,其中 0 表示相同元素,高值表示非常不相似的元素,可以通过应用高斯(也称 RBF,热)核函数转换为非常适合该算法的亲和/相似度矩阵
np.exp(- dist_matrix ** 2 / (2. * delta ** 2))
其中
delta
是表示高斯核宽度的自由参数。另一种方法是采用点的 k-最近邻连通矩阵的对称版本。
如果安装了 pyamg 包,它将被使用:这大大加快了计算速度。
参考文献
[4]示例
>>> from sklearn.cluster import SpectralClustering >>> import numpy as np >>> X = np.array([[1, 1], [2, 1], [1, 0], ... [4, 7], [3, 5], [3, 6]]) >>> clustering = SpectralClustering(n_clusters=2, ... assign_labels='discretize', ... random_state=0).fit(X) >>> clustering.labels_ array([1, 1, 1, 0, 0, 0]) >>> clustering SpectralClustering(assign_labels='discretize', n_clusters=2, random_state=0)
有关谱聚类与其他聚类算法的比较,请参见 在玩具数据集上比较不同的聚类算法
- fit(X, y=None)[source]#
从特征或亲和矩阵执行谱聚类。
- 参数:
- X形状为 (n_samples, n_features) 或 (n_samples, n_samples) 的类数组或稀疏矩阵
要聚类的训练实例,如果
affinity='precomputed'
,则为实例之间的相似性/亲和性;如果affinity='precomputed_nearest_neighbors
,则为实例之间的距离。如果提供稀疏矩阵的格式不是csr_matrix
、csc_matrix
或coo_matrix
,则会转换为稀疏csr_matrix
。- y忽略
不使用,此处仅为 API 一致性而存在。
- 返回:
- self对象
拟合好的估计器实例。
- fit_predict(X, y=None)[source]#
对
X
执行谱聚类并返回簇标签。- 参数:
- X形状为 (n_samples, n_features) 或 (n_samples, n_samples) 的类数组或稀疏矩阵
要聚类的训练实例,如果
affinity='precomputed'
,则为实例之间的相似性/亲和性;如果affinity='precomputed_nearest_neighbors
,则为实例之间的距离。如果提供稀疏矩阵的格式不是csr_matrix
、csc_matrix
或coo_matrix
,则会转换为稀疏csr_matrix
。- y忽略
不使用,此处仅为 API 一致性而存在。
- 返回:
- labels形状为 (n_samples,) 的 ndarray
簇标签。
- get_metadata_routing()[source]#
获取此对象的元数据路由。
请查阅 用户指南 了解路由机制的工作原理。
- 返回:
- routingMetadataRequest
封装路由信息的
MetadataRequest
。