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:
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
[4]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_matrix
、csc_matrix
或coo_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_matrix
、csc_matrix
或coo_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
参数名称映射到它们的值。