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

应用聚类到归一化拉普拉斯矩阵的投影。

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

如果亲和矩阵是图的邻接矩阵,这种方法可以用来找到归一化的图割 [1], [2]

当调用 fit 时,使用以下方法之一构造亲和矩阵: 使用核函数,例如带有欧几里得距离 d(X, X) 的高斯(又名RBF)核:

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

或者使用k-最近邻的连通性矩阵。

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

更多信息请参阅 用户指南

Parameters:
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

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

Note

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

Added in version 1.2: 添加了 ‘auto’ 选项。

assign_labels{‘kmeans’, ‘discretize’, ‘cluster_qr’}, default=’kmeans’

在嵌入空间中分配标签的策略。在拉普拉斯嵌入后有两种分配标签的方法。k-means是一个流行的选择,但它对初始化敏感。离散化是另一种对随机初始化不太敏感的方法 [3]。 cluster_qr 方法 [5] 直接从谱聚类中的特征向量中提取簇。与k-means和离散化相比,cluster_qr 没有调优参数且不运行迭代,但在质量和速度方面可能优于k-means和离散化。

Changed in version 1.1: 添加了新的标签方法 ‘cluster_qr’。

degreefloat, default=3

多项式核的度数。被其他核忽略。

coef0float, default=1

多项式和sigmoid核的零系数。被其他核忽略。

kernel_paramsdict of str to any, default=None

传递给核函数的参数(关键字参数)和值。被其他核忽略。

n_jobsint, default=None

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

verbosebool, default=False

详细模式。

Added in version 0.24.

Attributes:
affinity_matrix_array-like of shape (n_samples, n_samples)

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

labels_ndarray of shape (n_samples,)

每个点的标签

n_features_in_int

fit 期间看到的特征数量。

Added in version 0.24.

feature_names_in_ndarray of shape ( n_features_in_ ,)

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

Added in version 1.0.

See also

sklearn.cluster.KMeans

K-Means聚类。

sklearn.cluster.DBSCAN

具有噪声的基于密度的空间聚类应用。

Notes

一个表示0表示相同元素和高值表示非常不同元素的距离矩阵可以通过应用高斯(又名RBF,热)核转换为适合算法的亲和/相似性矩阵:

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

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

另一种方法是取点的k-最近邻连通性矩阵的对称版本。

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

References

Examples

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

执行从特征或亲和矩阵的光谱聚类。

Parameters:
X{array-like, sparse matrix} of shape (n_samples, n_features) or (n_samples, n_samples)

要聚类的训练实例,如果 affinity='precomputed' ,则为实例之间的相似性/亲和性,或者如果 affinity='precomputed_nearest_neighbors' ,则为实例之间的距离。如果提供的稀疏矩阵不是 csr_matrixcsc_matrixcoo_matrix 格式,它将被转换为稀疏的 csr_matrix

yIgnored

未使用,此处存在是为了通过约定保持API一致性。

Returns:
selfobject

估计器的拟合实例。

fit_predict(X, y=None)#

执行谱聚类并返回聚类标签。

Parameters:
X{array-like, sparse matrix} of shape (n_samples, n_features) or (n_samples, n_samples)

要聚类的训练实例,如果 affinity='precomputed' ,则为实例之间的相似性/亲和性,或者如果 affinity='precomputed_nearest_neighbors' ,则为实例之间的距离。如果提供的稀疏矩阵不是 csr_matrixcsc_matrixcoo_matrix 格式,则将转换为稀疏的 csr_matrix

yIgnored

未使用,此处仅为了保持API一致性而存在。

Returns:
labelsndarray of shape (n_samples,)

聚类标签。

get_metadata_routing()#

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

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

Returns:
routingMetadataRequest

MetadataRequest 封装的 路由信息。

get_params(deep=True)#

获取此估计器的参数。

Parameters:
deepbool, 默认=True

如果为True,将返回此估计器和包含的子对象(也是估计器)的参数。

Returns:
paramsdict

参数名称映射到它们的值。

set_params(**params)#

设置此估计器的参数。

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

Parameters:
**paramsdict

估计器参数。

Returns:
selfestimator instance

估计器实例。