spectral_embedding#
- sklearn.manifold.spectral_embedding(adjacency, *, n_components=8, eigen_solver=None, random_state=None, eigen_tol='auto', norm_laplacian=True, drop_first=True)[source]#
将样本投影到图拉普拉斯算子的第一个特征向量上。
邻接矩阵用于计算归一化图拉普拉斯矩阵,其谱(特别是与最小特征值相关的特征向量)可以解释为将图分成大小相近的组件所需的最小割数。
即使
adjacency变量不是严格的图邻接矩阵,而更一般地是样本之间的亲和度或相似度矩阵(例如,欧几里得距离矩阵的热核或 k-NN 矩阵),此嵌入也可以“工作”。但是,必须注意始终使亲和度矩阵对称,以便特征向量分解按预期工作。
注意:拉普拉斯特征图(Laplacian Eigenmaps)是此处实现的实际算法。
在用户指南中了解更多信息。
- 参数:
- adjacency{array-like, sparse graph} of shape (n_samples, n_samples)
要嵌入的图的邻接矩阵。
- n_componentsint, default=8
投影子空间的维度。
- 要形成的聚类数。
要使用的特征值分解策略。AMG 需要安装 pyamg。它在非常大、稀疏的问题上可能更快,但也可能导致不稳定。如果为 None,则使用
'arpack'。- random_stateint, RandomState instance or None, default=None
当
eigen_solver == 'amg'时用于 lobpcg 特征向量分解初始化的伪随机数生成器,以及用于 K-Means 初始化。使用整数使跨调用的结果具有确定性(参见词汇表)。注意
用于初始化 lobpcg 特征向量分解的伪随机数生成器,当
eigen_solver == 'amg'时,以及用于 K-Means 初始化。使用整数使结果在多次调用中具有确定性(请参阅 词汇表)。- 使用最近邻方法构造亲和力矩阵时要使用的邻居数。对于
affinity='rbf',将被忽略。 Stopping criterion for eigendecomposition of the Laplacian matrix. If
eigen_tol="auto"then the passed tolerance will depend on theeigen_solver拉普拉斯矩阵特征分解的停止准则。如果
eigen_tol="auto",则传递的容差将取决于eigen_solver如果
eigen_solver="arpack",则eigen_tol=0.0;
请注意,当使用
eigen_solver="amg"时,tol<1e-5的值可能会导致收敛问题,应避免使用。请注意,当使用
eigen_solver="lobpcg"或eigen_solver="amg"时,tol<1e-5的值可能导致收敛问题,应避免使用。- norm_laplacianbool, default=True
如果为 True,则计算对称归一化拉普拉斯矩阵。
- drop_firstbool, default=True
是否丢弃第一个特征向量。对于谱嵌入,这应为 True,因为对于连通图,第一个特征向量应为常数向量,但对于谱聚类,这应保留为 False 以保留第一个特征向量。
- 返回:
- embeddingndarray of shape (n_samples, n_components)
降维后的样本。
注意事项
当图具有一个连通分量时,谱嵌入(拉普拉斯特征图)最有用。如果图有多个分量,前几个特征向量将仅揭示图的连通分量。
References
示例
>>> from sklearn.datasets import load_digits >>> from sklearn.neighbors import kneighbors_graph >>> from sklearn.manifold import spectral_embedding >>> X, _ = load_digits(return_X_y=True) >>> X = X[:100] >>> affinity_matrix = kneighbors_graph( ... X, n_neighbors=int(X.shape[0] / 10), include_self=True ... ) >>> # make the matrix symmetric >>> affinity_matrix = 0.5 * (affinity_matrix + affinity_matrix.T) >>> embedding = spectral_embedding(affinity_matrix, n_components=2, random_state=42) >>> embedding.shape (100, 2)