Scipy's sparse eigsh () dla małych wartości własnych

Próbuję napisać algorytm klastrowania widmowego przy użyciu NumPy / SciPy dla większych (ale wciąż możliwych do przetworzenia) systemów, wykorzystując rzadką bibliotekę algebry liniowej SciPy. Niestety, mam problemy ze stabilnościąeigsh ().

Oto mój kod:

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)

Thesklearn biblioteka odnosi się w szczególności do pakietu scikit-learnTa metoda do obliczania laplacji wykresu z rzadkiej macierzy SciPy.

_sparse_rbf_kernel to metoda, którą napisałem, aby obliczyć powinowactwa par punktów danych. Działa poprzez tworzenie rzadkiej macierzy powinowactwa z danych obrazu, w szczególności przez obliczanie powinowactwa par dla 8-osiedli wokół każdego piksela (zamiast parowania dla wszystkich pikseli z naukami scikit)rbf_kernel metoda, która dla rekordu też tego nie rozwiązuje).

Ponieważ laplacian jest nienormalizowany, szukam najmniejszych wartości własnych i odpowiadających im wektorów własnych systemu. Rozumiem, żeARPACK nie nadaje się do wyszukiwania małych wartości własnych, ale staram się użyć zmiany biegów, aby znaleźć te wartości i nadal nie odnoszę zbyt wielu sukcesów.

Z powyższymi argumentami (w szczególności,sigma = 0), Pojawia się następujący błąd:

RuntimeError: Factor is exactly singular

Zsigma = 0.001, Mam inny błąd:

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

Próbowałem wszystkich trzech różnych wartości dlamode z tym samym rezultatem.Wszelkie sugestie dotyczące używania rzadkiej biblioteki SciPy do znajdowania małych wartości własnych dużego systemu?

questionAnswers(1)

yourAnswerToTheQuestion