Sto lavorando a un progetto che include l'uso dell'analisi semantica latente (LSA). Ciò richiede l'utilizzo della decompressione del valore singolare (SVD), talvolta su set di dati di grandi dimensioni. Esiste un'implementazione di SVD randomizzato (rSVD) disponibile per l'ambiente Windows \ Visual Studio? Ho visto un progetto chiamato redsvd ma sembra che sia supportato solo su Linux.SVD randomizzato per LSA LSI su ambiente Windows
risposta
ILNumerics potrebbe averlo ma non ho visto se lo fanno rSVD e non ho esperienza personale con la libreria, ma è disponibile tramite NuGet per fortuna.
Qui ci sono i documenti sulla loro attuazione SVD:
http://ilnumerics.net/apidoc/Index.html?topic=html/Overload_ILNumerics_ILMath_svd.htm
C'è anche NAG, ma il suo corrispettivo: http://www.nag.co.uk/numeric/numerical_libraries.asp
Inoltre ho verificato redsvd, e scommetto Potrei portarlo in C# per te o almeno farlo compilare su Windows. Se quelli non soddisfano le tue esigenze fammi sapere e darò un'occhiata alla complessità del porto.
UPDATE:
Ben tornato a casa stasera e ha deciso di dare un colpo. Ecco un modo molto veloce per ottenere redsvd lavorare su Windows utilizzando Visual Studio 2010. ho postato su GitHub:
https://github.com/hoonto/redsvdwin
aprire il rsvd3.sln in Visual Studio, costruire, e si otterrà un rsvd3.exe nella directory Debug.
Run che:
C:\Users\MLM\Documents\Visual Studio 2010\Projects\redsvdwin\Debug>rsvd3.exe
usage: redsvd --input=string --output=string [options] ...
redsvd supports the following format types (one line for each row)
[format=dense] (<value>+\n)+
[format=sparse] ((colum_id:value)+\n)+
Example:
>redsvd -i imat -o omat -r 10 -f dense
compuate SVD for a dense matrix in imat and output omat.U omat.V, and omat.S
with the 10 largest eigen values/vectors
>redsvd -i imat -o omat -r 3 -f sparse -m PCA
compuate PCA for a sparse matrix in imat and output omat.PC omat.SCORE
with the 3 largest principal components
options:
-i, --input input file (string)
-o, --output output file's prefix (string)
-r, --rank rank (int [=10])
-f, --format format type (dense|sparse) See example. (string [=dense])
-m, --method method (SVD|PCA|SymEigen) (string [=SVD])
E non lo è. A proposito, questo crea redsvdMain.cpp, se si desidera il file Incr con main it, escludere redsvdMain.cpp e includere redsvdMainIncr.cpp. Dato che entrambi hanno il main in loro ho solo escluso la versione di Incr e ho costruito la versione normale.
Inoltre, ho incluso anche le intestazioni Eigen3 nel repository github e le ho inserite nella sezione Additional Include per la configurazione della soluzione, quindi non c'è bisogno di giocarle affatto.
Un'ultima cosa, non c'è nulla come cxxabi.h per quanto ne so per Visual Studio, quindi ho fatto un po 'di barare, vedrai dove ho apportato le modifiche perché saranno commentate in questo modo:
//MLM: commented next 3
//...
//...
//...
//MLM: added 1
...
e così via. Quindi, se hai bisogno di apportare modifiche, saprai dove sono i miei cambiamenti.
qr in ILNumerics ha un sovraccarico ILMath.qr (A, outR, outE, economy) che consente di eseguire la decomposizione in scala economica.
In qualche modo ho perso questa opzione ... Vado a dare un'occhiata, grazie! – Leeor
Innanzitutto, grazie per lo sforzo! In secondo luogo, un'implementazione efficiente di SVD non può essere eseguita con Ilnumerics in quanto non esiste un'implementazione di una decomposizione QR di economia ... – Leeor
Piacere mio, se hai qualche problema con questo, non esitare a contattare SO o Github. Interessante su Ilnumerics e l'economia QR.Al giorno d'oggi la mia matematica è molto arrugginita, ma mi chiedo perché INumerici andrebbero a tanto e non lo fanno? Secondo Matlab è solo: "Se m> n, vengono calcolate solo le prime n colonne di Q e le prime n righe di R. Se m <= n, questo è uguale a [Q, R] = qr (A) ". Forse non lo vedo, ma ciò non sembra difficile da implementare per i ilnumerici. Devo trascurare qualcosa. Forse lo hanno sul radar per una data futura. – hoonto