Scigy esparso eigsh () para pequenos autovalores

Eu estou tentando escrever um algoritmo de clustering espectral usando NumPy / SciPy para sistemas maiores (mas ainda tratáveis), fazendo uso da biblioteca de álgebra linear esparsa do SciPy. Infelizmente, estou correndo em problemas de estabilidade comeigsh ().

Aqui está meu código:

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)

osklearn biblioteca refere-se ao pacote scikit-learn, especificamenteeste método para calcular um gráfico laplaciano a partir de uma matriz SciPy esparsa.

_sparse_rbf_kernel é um método que escrevi para calcular as afinidades de pares dos pontos de dados. Ele opera criando uma matriz de afinidade esparsa a partir de dados de imagem, especificamente calculando apenas afinidades pareadas para as 8 vizinhanças ao redor de cada pixel (em vez de parear para todos os pixels com scikit-learnrbf_kernel método, que para o registro não corrigir isso também).

Como o laplaciano é desnormalizado, procuro os menores autovalores e os autovetores correspondentes do sistema. Eu entendi aquiloO ARPACK não é adequado para encontrar pequenos autovalores, mas estou tentando usar shift-invert para encontrar esses valores e ainda não estou tendo muito sucesso.

Com os argumentos acima (especificamente,sigma = 0), Estou tendo o erro a seguir:

RuntimeError: Factor is exactly singular

Comsigma = 0.001, Recebo um erro diferente:

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

Eu tentei todos os três valores diferentes paramode com o mesmo resultado.Alguma sugestão para usar a biblioteca esparsa do SciPy para encontrar pequenos autovalores de um sistema grande?

questionAnswers(1)

yourAnswerToTheQuestion