sklearn.cluster.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=0.0, assign_labels='kmeans', degree=3, coef0=1, kernel_params=None, n_jobs=None)
将聚类应用于归一化Laplacian的投影。
在实际应用中,光谱聚类是非常有用的,当单个簇的结构是高度非凸的,或者更普遍地说,当簇的中心和扩展的度量并不适合描述完整的聚类时,光谱聚类是非常有用的。例如,当簇是二维平面上的嵌套圆时。
如果亲和度是图的邻接矩阵,则该方法可用于求图的归一化割集。
调用fit
时,使用欧氏距离d(X,X)
的高斯(又名RBF)核等核函数构造亲和矩阵:
np.exp(-gamma * d(X,X) ** 2)
或k-最近邻连通矩阵。
或者,使用precomputed
方法,可以使用用户提供的关联矩阵。
在用户指南中阅读更多内容。
参数 | 说明 |
---|---|
n_clusters | integer, optional 投影子空间的维数 |
eigen_solver | {None, ‘arpack’, ‘lobpcg’, or ‘amg’} 特征值分解策略的应用。AMG需要安装pyamg。它可以在非常大的稀疏问题上更快,但也可能导致不稳定。 |
n_components | integer, optional, default=n_clusters 用于光谱嵌入的特征向量数 |
random_state | int, RandomState instance, default=None 一种用于Lobpcg特征向量分解初始化的伪随机数发生器,当 eigen_solver='amg' , 通过K-Means初始化。使用int使随机性确定性。见Glossary。 |
n_init | int, optional, default: 10 k均值算法将使用不同的质心种子运行。最后的结果将是n_init连续运行的最佳inertia输出。 |
gamma | float, default=1.0 rbf,poly, sigmoid, laplacian 和chi2 核的核系数。对于 affinity='nearest_neighbors' 的情况请忽略。 |
affinity | string or callable, default ‘rbf’ 如何构造亲和矩阵 - ‘nearest_neighbors’:通过计算近邻图来构造亲和矩阵。 - ‘rbf’:利用径向基函数(RBF)核构造亲和矩阵。 - ‘precomputed’:将 X 解释为预先计算的亲和矩阵。- ‘precomputed_nearest_neighbors’:将 X 解释为预先计算的近邻的稀疏图,并通过选择n_neighbors 近邻构造亲和矩阵。- 由 pairwise_kernels 支撑的一种核。只应使用产生相似分数的内核(非负值,随相似性的增加)。聚类算法不检查此属性。 |
n_neighbors | integer 使用最近邻方法构造关联矩阵时要使用的邻居数。当 affinity='rbf' 忽略。 |
eigen_tol | float, optional, default: 0.0 Laplacian矩阵特征点的停止准则, 当 eigen_solver='arpack' 。 |
assign_labels | {‘kmeans’, ‘discretize’}, default: ‘kmeans’ 在嵌入空间中分配标签的策略。在Laplacian嵌入之后,有两种分配标签的方法。k-means可以应用,是一种很受欢迎的选择。但是它对初始化也很敏感。离散化是另一种对随机初始化不那么敏感的方法。 |
degree | float, default=3 多项式核的维度, 其他内核忽略 |
coef0 | float, default=1 多项式核和sigmoid核的零系数。其他内核忽略 |
kernel_params | dictionary of string to any, optional 参数(关键字参数)和作为可调用对象传递的内核值。其他内核忽略。 |
n_jobs | int or None, optional (default=None) 要运行的并行任务数。 None 意味1, 除非在joblib.parallel_backend 环境中。-1 指使用所有处理器。有关详细信息,请参Glossary。 |
属性 | 方法 |
---|---|
affinity_matrix_ | array-like, shape (n_samples, n_samples) 用于聚类的亲和矩阵。只有在调用 fit 之后才能用。 |
labels_ | array, shape (n_samples,) 每一点的标签 |
注意
如果有一个亲和矩阵,例如距离矩阵,它的0表示相同的元素,而高的值表示非常不同的元素,则可以通过应用高斯(RBF,热)核将其转换成一个非常适合该算法的相似矩阵:
np.exp(- dist_matrix ** 2 / (2. * delta ** 2))
其中delta
是一个自由参数,表示高斯核的宽度。
另一种选择是取点的k个最近邻连通矩阵的对称版本。
如果安装了pyamg包,就会使用它:这大大加快了计算速度。
参考
Normalized cuts and image segmentation, 2000 Jianbo Shi, Jitendra Malikhttp://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.160.2324
A Tutorial on Spectral Clustering, 2007 Ulrike von Luxburghttp://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.165.9323
Multiclass spectral clustering, 2003 Stella X. Yu, Jianbo Shihttps://www1.icsi.berkeley.edu/~stellayu/publication/doc/2003kwayICCV.pdf
示例
>>> 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 (self, X[, y]) |
根据特征或亲和矩阵执行光谱聚类 |
fit_predict (self, X[, y]) |
根据特征或亲和矩阵执行光谱聚类,并返回聚类标签。 |
get_params (self[, deep]) |
获取此估计器的参数 |
set_params (self, **params) |
设置此估计器的参数 |
__init__(self, 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=0.0, assign_labels='kmeans', degree=3, coef0=1, kernel_params=None, n_jobs=None)
初始化self。请参阅help(type(self))以获得准确的说明
fit(self, X, y=None)
根据特征或亲和矩阵执行光谱聚类
参数 | 说明 |
---|---|
X | array-like or sparse matrix, shape (n_samples, n_features), or array-like, shape (n_samples, n_samples) 要聚类的实例, 或者实例之间的相似性/亲和度, 如果 affinity='precomputed' 。如果以csr_matrix , csc_matrix , 或者 coo_matrix 以外的格式提供稀疏矩阵,则将其转换为稀疏csr_matrix 。 |
y | Ignored 未使用,在此按约定呈现为api一致性。 |
返回值 | 说明 |
---|---|
self | - |
fit_predict(self, X, y=None)
根据特征或亲和矩阵执行光谱聚类,并返回聚类标签。
参数 | 说明 |
---|---|
X | array-like or sparse matrix, shape (n_samples, n_features), or array-like, shape (n_samples, n_samples) 要聚类的实例, 或者实例之间的相似性/亲和度, 如果 affinity='precomputed' 。如果以csr_matrix , csc_matrix , 或者 coo_matrix 以外的格式提供稀疏矩阵,则将其转换为稀疏csr_matrix 。 |
y | Ignored 未使用,在此按约定呈现为api一致性。 |
返回值 | 说明 |
---|---|
labels | ndarray, shape (n_samples,) 聚类标签 |
get_params(self, deep=True)
获取此估计器的参数
表格 | 说明 |
---|---|
deep | bool, default=True 如果为True,则将返回此估计器的参数和所包含的作为估计量的子对象。 |
返回值 | 说明 |
---|---|
params | mapping of string to any 映射到其值的参数名称 |
set_params(self, **params)
设置此估计器的参数
该方法适用于简单估计器以及嵌套对象(例如pipelines)。后者具有表单的 <component>__<parameter>
参数,这样就可以更新嵌套对象的每个组件。
表格 | 说明 |
---|---|
**params | dict 估计器参数 |
返回值 | 说明书 |
---|---|
self | object 估计器实例 |