gpt4 book ai didi

python - 用于小特征值的 Scipy 稀疏 eigsh()

转载 作者:太空狗 更新时间:2023-10-29 20:48:04 25 4
gpt4 key购买 nike

我正在尝试使用 NumPy/SciPy 为更大(但仍然易于处理)的系统编写谱聚类算法,利用 SciPy 的稀疏线性代数库。不幸的是,我遇到了 eigsh() 的稳定性问题.

这是我的代码:

import numpy as np
import scipy.sparse
import scipy.sparse.linalg as SLA
import sklearn.utils.graph as graph

W = self._sparse_rbf_kernel(self.X_, self.datashape)
D = scipy.sparse.csc_matrix(np.diag(np.array(W.sum(axis = 0))[0]))
L = graph.graph_laplacian(W) # D - W
vals, vects = SLA.eigsh(L, k = self.k, M = D, which = 'SM', sigma = 0, maxiter = 1000)

sklearn 库指的是 scikit-learn 包,特别是 this method用于从稀疏 SciPy 矩阵计算图拉普拉斯算子。

_sparse_rbf_kernel 是我编写的一种方法,用于计算数据点的成对亲和度。它通过从图像数据创建稀疏亲和性矩阵来运行,特别是通过仅计算每个像素周围 8 个邻域的成对亲和性(而不是使用 scikit-learn 的 rbf_kernel 方法计算所有像素的成对亲和性,这对于记录也不能解决这个问题)。

由于拉普拉斯算子未归一化,我正在寻找系统的最小特征值和相应的特征向量。我明白 ARPACK is ill-suited for finding small eigenvalues ,但我正在尝试使用 shift-invert 来查找这些值,但仍然没有取得太大的成功。

使用上述参数(具体来说,sigma = 0),我得到以下错误:

RuntimeError: Factor is exactly singular

使用 sigma = 0.001,我得到一个不同的错误:

scipy.sparse.linalg.eigen.arpack.arpack.ArpackNoConvergence: ARPACK error -1: No convergence (1001 iterations, 0/5 eigenvectors converged)

我已经为 mode 尝试了所有三个不同的值,结果相同。 对于使用 SciPy 稀疏库查找大型系统的小特征值有什么建议吗?

最佳答案

您应该使用 which='LM':在 shift-invert 模式下,此参数指的是变换后的特征值。 (如 the documentation 中所述。)

关于python - 用于小特征值的 Scipy 稀疏 eigsh(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12125952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com