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

将样本投影到拉普拉斯图的第一个特征向。

邻近矩阵用于计算规范化图拉普拉斯,其谱(尤其是与最小特征值相关的特征载体)根据将图拆分为最小尺寸的分量所需的最小切割数量进行解释。

即使 adjacency 变量不是严格的图的邻接矩阵,而是更一般地样本之间的亲和性或相似性矩阵(例如欧几里得距离矩阵或k-NN矩阵的热核)。

然而,必须注意始终使亲和力矩阵对称,以便特征向量分解按预期工作。

注意:拉普拉斯特征映射是这里实现的实际算法。

阅读更多的 User Guide .

参数:
adjacency形状(n_samples,n_samples)的{类数组,稀疏图}

要嵌入的图的邻近矩阵。

n_componentsint, default=8

投影子空间的维度。

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

要使用的特征值分解策略。AMG需要安装pyamg。它可以在非常大的稀疏问题上更快,但也可能导致不稳定。如果没有,那么 'arpack' 采用了

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。

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="amg"tol<1e-5 可能会导致趋同问题,应该避免。

Added in version 1.2: 添加了“自动”选项。

norm_laplacian布尔,默认=True

如果为真,则计算对称正规化拉普拉斯方程。

drop_first布尔,默认=True

是否删除第一个特征载体。对于谱嵌入,这应该是True,因为第一个特征向量应该是连通图的恒定向量,但对于谱集群,这应该保持为False以保留第一个特征向量。

返回:
embedding形状的nd数组(n_samples,n_components)

减少的样本。

注意到

当图具有一个连通分量时,谱嵌入(拉普拉斯特征映射)最有用。如果该图有许多分量,那么前几个特征向量将简单地揭示该图的连接分量。

引用

示例

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