当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python sklearn SpectralClustering用法及代码示例


本文简要介绍python语言中 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, verbose=False)

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

在实践中,当单个集群的结构高度非凸时,或者更一般地,当集群的中心和散布的测量不适合说明整个集群时,频谱聚类非常有用,例如当集群嵌套时二维平面上的圆。

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

调用 fit 时,使用具有欧几里德距离 d(X, X) 的高斯(又名 RBF)内核之类的内核函数构造亲和矩阵:

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

或 k-nearest 邻居连接矩阵。

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

在用户指南中阅读更多信息。

参数

n_clusters整数,默认=8

投影子空间的维度。

eigen_solver{‘arpack’, ‘lobpcg’, ‘amg’},默认=无

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

n_components整数,默认=n_clusters

用于谱嵌入的特征向量数。

random_stateint,RandomState 实例,默认=无

一个伪随机数生成器,用于在 eigen_solver == 'amg' 和 K-Means 初始化时初始化 lobpcg 特征向量分解。使用int 使结果在调用之间具有确定性(参见词汇表)。

注意

使用 eigen_solver == 'amg' 时,还需要使用 np.random.seed(int) 修复全局 numpy 种子以获得确定性结果。有关详细信息,请参阅https://github.com/pyamg/pyamg/issues/139

n_init整数,默认=10

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

gamma浮点数,默认=1.0

rbf、poly、sigmoid、laplacian 和 chi2 内核的内核系数。忽略 affinity='nearest_neighbors'

affinitystr 或可调用,默认='rbf'
如何构建亲和矩阵。
  • ‘nearest_neighbors’:通过计算最近邻图来构造亲和矩阵。
  • ‘rbf’:使用径向基函数 (RBF) 内核构造亲和矩阵。
  • ‘precomputed’:将X 解释为预先计算的亲和度矩阵,其中较大的值表示实例之间的相似性较大。
  • ‘precomputed_nearest_neighbors’:将X解释为预先计算的距离的稀疏图,并从每个实例的n_neighbors最近邻居构造二进制亲和矩阵。
  • pairwise_kernels 支持的内核之一。

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

n_neighbors整数,默认=10

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

eigen_tol浮点数,默认=0.0

eigen_solver='arpack' 时拉普拉斯矩阵特征分解的停止标准。

assign_labels{‘kmeans’, ‘discretize’},默认='kmeans'

在嵌入空间中分配标签的策略。拉普拉斯嵌入后有两种分配标签的方法。 k-means 是一个流行的选择,但它可能对初始化敏感。离散化是另一种对随机初始化不太敏感的方法[3]。

degree浮点数,默认=3

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

coef0浮点数,默认=1

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

kernel_paramsstr 的字典到任何,默认=无

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

n_jobs整数,默认=无

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

verbose布尔,默认=假

详细模式。

属性

affinity_matrix_形状类似数组 (n_samples, n_samples)

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

labels_ndarray 形状 (n_samples,)

每个点的标签

n_features_in_int

拟合期间看到的特征数。

feature_names_in_ndarray 形状(n_features_in_,)

拟合期间看到的特征名称。仅当 X 具有全为字符串的函数名称时才定义。

注意

距离矩阵 0 表示相同元素,高值表示非常不同的元素,可以通过应用高斯(又名 RBF,热)核将算法转换为相似度/相似度矩阵 well-suited:

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

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

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

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

参考

1

归一化切割和图像分割,2000 施剑波,Jitendra Malik

2

频谱聚类教程,2007 年 Ulrike von Luxburg

3

多类频谱聚类,2003 Stella X. Yu,Jianbo Shi

4

迈向最优预条件特征解算器:局部最优块预条件共轭梯度法,2001 年。A. V. Knyazev SIAM 科学计算杂志 23,第 1 期。 2,第 517-541 页。

例子

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

相关用法


注:本文由纯净天空筛选整理自scikit-learn.org大神的英文原创作品 sklearn.cluster.SpectralClustering。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。