谱聚类#

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]#

对归一化拉普拉斯算子的投影应用聚类。

在实践中,当各个聚类的结构高度非凸,或者更一般地,当聚类的中心和扩展的度量不能充分描述整个聚类时(例如,当聚类是二维平面上的嵌套圆圈时),谱聚类非常有用。

如果亲和矩阵是图的邻接矩阵,则此方法可用于查找归一化图割 [1][2]

调用fit时,将使用高斯核(又称 RBF 核)之类的核函数以及欧几里得距离d(X, X)构造亲和矩阵。

np.exp(-gamma * d(X,X) ** 2)

或者使用k近邻连接矩阵。

或者,可以通过设置affinity='precomputed'来指定用户提供的亲和矩阵。

用户指南中了解更多信息。

参数:
n_clustersint, default=8

投影子空间的维度。

eigen_solver{‘arpack’, ‘lobpcg’, ‘amg’}, default=None

要使用的特征值分解策略。AMG 需要安装 pyamg。在非常大、稀疏的问题上,它可能更快,但也可能导致不稳定。如果为 None,则使用'arpack'。有关'lobpcg'的更多详细信息,请参见[4]

n_componentsint, default=None

用于谱嵌入的特征向量数。如果为 None,则默认为n_clusters

random_stateint, RandomState instance, default=None

用于在eigen_solver == 'amg'时初始化 lobpcg 特征向量分解以及 K-Means 初始化的伪随机数生成器。使用整数可在调用之间获得确定性结果(参见词汇表)。

注意

使用eigen_solver == 'amg'时,需要使用np.random.seed(int)修复全局 numpy 种子以获得确定性结果。有关更多信息,请参见pyamg/pyamg#139

n_initint, default=10

k-means 算法将使用不同的质心种子运行的次数。最终结果将是 n_init 次连续运行中就惯性而言的最佳输出。仅当assign_labels='kmeans'时才使用。

gammafloat, default=1.0

rbf、poly、sigmoid、laplacian 和 chi2 核的核系数。对于affinity='nearest_neighbors'affinity='precomputed'affinity='precomputed_nearest_neighbors'忽略。

affinitystr or callable, default=’rbf’
如何构造亲和矩阵。
  • ‘nearest_neighbors’:通过计算最近邻图来构造亲和矩阵。

  • ‘rbf’:使用径向基函数 (RBF) 核来构造亲和矩阵。

  • ‘precomputed’:将X解释为预计算的亲和矩阵,其中较大的值表示实例之间更大的相似性。

  • ‘precomputed_nearest_neighbors’:将X解释为预计算距离的稀疏图,并从每个实例的n_neighbors个最近邻构建二元亲和矩阵。

  • pairwise_kernels支持的核之一。

仅应使用产生相似性分数(非负值,随着相似性增加而增加)的内核。此属性不会由聚类算法检查。

n_neighborsint, default=10

使用最近邻方法构造亲和矩阵时要使用的邻居数。对于affinity='rbf'忽略。

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 的值可能会导致收敛问题,应避免。

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”。

degree浮点数,默认值=3

多项式核的阶数。其他核将忽略此参数。

coef0浮点数,默认值=1

多项式核和 sigmoid 核的零系数。其他核将忽略此参数。

kernel_params字典,键为字符串,值任意,默认值=None

作为可调用对象传递的核的参数(关键字参数)和值。其他核将忽略此参数。

n_jobs整数,默认值=None

affinity='nearest_neighbors'affinity='precomputed_nearest_neighbors' 时,要运行的并行作业数。邻居搜索将并行进行。None 表示 1,除非在 joblib.parallel_backend 上下文中。-1 表示使用所有处理器。更多详情请参见 词汇表

verbose布尔值,默认值=False

详细程度模式。

0.24版本新增。

属性:
affinity_matrix_形状为 (n_samples, n_samples) 的类数组

用于聚类的亲和矩阵。仅在调用 fit 后可用。

labels_形状为 (n_samples,) 的ndarray

每个点的标签

n_features_in_整数

fit 期间看到的特征数量。

0.24版本新增。

feature_names_in_形状为 (n_features_in_,) 的ndarray

fit 期间看到的特征名称。仅当 X 的特征名称全部为字符串时定义。

1.0版本新增。

另请参见

sklearn.cluster.KMeans

K-Means 聚类。

sklearn.cluster.DBSCAN

基于密度的应用于噪声的聚类方法。

备注

可以将距离矩阵(其中 0 表示相同元素,高值表示差异很大的元素)转换为适合该算法的亲和/相似度矩阵,方法是应用高斯(又名 RBF,热)核

np.exp(- dist_matrix ** 2 / (2. * delta ** 2))

其中 delta 是一个自由参数,表示高斯核的宽度。

另一种方法是采用点的 k 近邻连接矩阵的对称版本。

如果安装了 pyamg 包,则将使用它:这大大加快了计算速度。

参考文献

示例

>>> 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_matrixcsc_matrixcoo_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_matrixcsc_matrixcoo_matrix 以外的格式提供稀疏矩阵,则将其转换为稀疏 csr_matrix

y忽略

未使用,出于 API 一致性约定而在此处显示。

返回:
labelsndarray of shape (n_samples,)

聚类标签。

get_metadata_routing()[source]#

获取此对象的元数据路由。

请查看用户指南了解路由机制的工作原理。

返回:
routingMetadataRequest

一个MetadataRequest,封装了路由信息。

get_params(deep=True)[source]#

获取此估计器的参数。

参数:
deepbool, default=True

如果为 True,则将返回此估计器及其包含的作为估计器的子对象的参数。

返回:
paramsdict

参数名称与其值的映射。

set_params(**params)[source]#

设置此估计器的参数。

此方法适用于简单的估计器以及嵌套对象(例如Pipeline)。后者具有<component>__<parameter>形式的参数,因此可以更新嵌套对象的每个组件。

参数:
**paramsdict

估计器参数。

返回:
selfestimator instance

估计器实例。