2017-10-02 23 views
0

Ich würde gerne die SVD-Methode reproduzieren, die in einer Standford-Vorlesung über meinen eigenen Datensatz erwähnt wurde. Der Schieber des Vortrags ist, wie folgendPython Kernel tot bei SVD auf einer spärlichen symmetrischen Matrix

stanford lecture

Mein-Datenmenge ist vom gleichen Typ, der ein Wort Kookkurrenzmatrix M mit einer Größe von

<13840x13840 sparse matrix of type '<type 'numpy.int64'>' 
with 597828 stored elements in Compressed Sparse Column format> 

erzeugt und verarbeitet von CountVectorizer(), beachte, dass dies eine symmetrische Matrix ist.

Allerdings, wenn ich versuchte Funktionen von SVD zu extrahieren, jedoch keines der folgenden Code funktioniert,

1. Versuch:

scipy.linalg.svd(M) 

ich die Matrix aus spärlichen csr todense versucht haben() und toarray(), nahm mein Computer ein paar Minuten und es zeigt Kernel stoppt. Ich spielte auch um mit unterschiedlichen Parametereinstellungen

2. Versuch:

scipy.sparse.linalg.svds(M) 

Ich habe auch versucht, den Matrix-Typen von int64 zu ändern FLOAT64 jedoch der Kernel tot nach 30 Sekunden oder so.

Jeder könnte mir einen Weg vorschlagen, SVD auf dieser Matrix in irgendeiner Weise durchzuführen?

Vielen Dank

Antwort

1

Es scheint, dass die Matrix für den Speicher zu stressig ist. Sie haben mehrere Möglichkeiten:

  1. Führen Sie einen adaptiven SVD,
  2. Verwenden modred,
  3. Verwenden Sie die SVD von dask.

Die letzten beiden sollten aus der Box funktionieren. Alle diese Optionen laden nur was der Speicher kann.

+0

tatsächlich, nachdem ich das dask-Paket installiert habe, wird der obige Code viel schneller, auch wenn ich keine DASK-SVD-Funktion verwende. Irgendwelche Gedanken warum? – FF0605

+0

@ FF0605 vielleicht hat es die blas/lapack/mkl stuff aktualisiert – Y0da

Verwandte Themen