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 使用诸如具有欧几里得距离的高斯(又名RBS)核之类的核函数来构建亲和力矩阵 d(X, X)

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

或k近邻连接矩阵。

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

阅读更多的 User Guide .

参数:
n_clustersint, default=8

投影子空间的维度。

eigen_solver{'arpack', 'lobpcg', 'amg'}, default=None

要使用的特征值分解策略。AMG需要安装pyamg。它可以在非常大的稀疏问题上更快,但也可能导致不稳定。如果没有,那么 'arpack' 采用了看到 [4] 有关的更多详细信息 'lobpcg' .

n_componentsint,默认=无

用于谱嵌入的特征量。如果无,默认为 n_clusters .

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' .

gammafloat,默认=1.0

rBF、poly、Sigmoid、Laplacian和chi 2核的核系数。忽略 affinity='nearest_neighbors' , affinity='precomputed'affinity='precomputed_nearest_neighbors' .

affinity字符串或可调用,默认=' rBF '
如何构建亲和力矩阵。
  • “nearest_neighbors”:通过计算最近邻居的图来构建亲和力矩阵。

  • “rbf”:使用辐射基函数(RBS)核构建亲和力矩阵。

  • “预先计算的”:解释 X 作为预先计算的亲和力矩阵,其中越大的值表示实例之间越大的相似性。

  • “precalled_neighbors”:解释 X 作为预先计算的距离的稀疏图,并根据 n_neighbors 每个实例的最近邻居。

  • 支持的内核之一 pairwise_kernels .

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

n_neighborsint,默认值=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: 添加了“自动”选项。

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

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

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

degreefloat,默认=3

多项核的次数。被其他果仁忽视。

coef0float,默认=1

多项核和Sigmoid核的零系数。被其他果仁忽视。

kernel_params字符串为any,默认=无

Parameters (keyword arguments) and values for kernel passed as callable object. Ignored by other kernels.

n_jobsint,默认=无

当时要运行的并行作业数 affinity='nearest_neighbors'affinity='precomputed_nearest_neighbors' .邻居搜索将并行进行。 None 意思是1,除非在a中 joblib.parallel_backend 上下文 -1 意味着使用所有处理器。看到 Glossary 了解更多详细信息。

verbose布尔,默认=假

冗长模式。

Added in version 0.24.

属性:
affinity_matrix_array-like of shape(n_samples,n_samples)

用于聚类的亲和矩阵。仅在致电后可用 fit .

labels_形状的nd数组(n_samples,)

每个点的标签

n_features_in_int

期间看到的功能数量 fit .

Added in version 0.24.

feature_names_in_ :nd形状数组 (n_features_in_ ,)nd数组形状(

Names of features seen during fit. Defined only when X has feature names that are all strings.

Added in version 1.0.

参见

sklearn.cluster.KMeans

K-Means聚类

sklearn.cluster.DBSCAN

含噪音应用程序的基于密度的空间聚集。

注意到

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

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)[源代码]#

根据特征或亲和力矩阵执行光谱集群。

参数:
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)[源代码]#

对上执行谱集群 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形状的nd数组(n_samples,)

集群标签。

get_metadata_routing()[源代码]#

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

请检查 User Guide 关于路由机制如何工作。

返回:
routingMetadataRequest

A MetadataRequest 封装路由信息。

get_params(deep=True)[源代码]#

获取此估计器的参数。

参数:
deep布尔,默认=True

如果为True,将返回此估计量和包含的作为估计量的子对象的参数。

返回:
paramsdict

参数名称映射到其值。

set_params(**params)[源代码]#

设置此估计器的参数。

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

参数:
**paramsdict

估计参数。

返回:
self估计器实例

估计实例。