2013-06-09 5 views
6

Ich arbeite an einem Projekt, das die Verwendung von latenter semantischer Analyse (LSA) enthält. Dies erfordert die Verwendung von Singular Value Decomposition (SVD), manchmal auf großen Datensätzen. Gibt es eine Implementierung von randomized-SVD ​​(rSVD) verfügbar für Windows \ Visual Studio-Umgebung? Ich habe ein Projekt namens redsvd gesehen, aber es scheint, dass es nur unter Linux unterstützt wird.Randomisierte SVD für LSA LSI auf Windows-Umgebung

Antwort

2

ILNumerics könnte es haben, aber ich habe nicht gesehen, ob sie rSVD tun und ich habe keine persönliche Erfahrung mit der Bibliothek, aber es ist zum Glück durch NuGet verfügbar.

http://ilnumerics.net

Hier sind die Dokumente auf ihre SVD Umsetzung:

http://ilnumerics.net/apidoc/Index.html?topic=html/Overload_ILNumerics_ILMath_svd.htm

Es gibt auch NAG, aber seine bezahlt: http://www.nag.co.uk/numeric/numerical_libraries.asp

ich auch redsvd ausgecheckt, und ich wette, Ich könnte es entweder für Sie in C# portieren oder zumindest dazu bringen, es unter Windows zu kompilieren. Wenn diese nicht Ihren Anforderungen entsprechen, lassen Sie es mich wissen und ich werde einen Blick auf die Komplexität des Ports werfen.

UPDATE:

Nun bekam heute Abend nach Hause und beschlossen, es auszuprobieren. Hier ist eine wirklich schnelle Möglichkeit, auf Windows zu bekommen redsvd arbeiten mit Visual Studio 2010. Ich kann es auf Github veröffentlicht:

https://github.com/hoonto/redsvdwin

Öffnen Sie die rsvd3.sln in Visual Studio, bauen sie, und Sie werden eine bekommen rsvd3.exe im Verzeichnis Debug.

Run, die:

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]) 

Und da ist es. Übrigens erstellt dies die redsvdMain.cpp, wenn Sie die INCR-Datei mit main it wollten, redsvdMain.cpp ausschließen und redsvdMainIncr.cpp einschließen. Da beide mains enthalten sind, habe ich die Incr-Version ausgeschlossen und die reguläre Version erstellt.

Außerdem habe ich auch die Eigen3-Header in das github-Repository eingefügt und sie in die zusätzlichen Includes für die Lösungskonfiguration eingefügt, so dass Sie sich damit nicht herumschlagen müssen.

Eine letzte Sache, es gibt nichts wie cxxabi.h meines Wissens für Visual Studio, also habe ich etwas betrogen, du wirst sehen, wo ich die Änderungen vorgenommen habe, weil sie so kommentiert werden:

//MLM: commented next 3 
//... 
//... 
//... 
//MLM: added 1 
... 

und so weiter. Wenn Sie also Anpassungen vornehmen müssen, wissen Sie, wo sich meine Änderungen befinden.

+0

Zuerst, danke für die Mühe! Zweitens kann eine effiziente Implementierung von SVD nicht mit Ilnumerics durchgeführt werden, da es keine Implementierung einer QR-Zerlegung der Wirtschaft gibt ... – Leeor

+0

Ich freue mich, wenn Sie irgendwelche Probleme damit haben, wenden Sie sich entweder an SO oder über Github. Interessant über die Ilnumerik und die Wirtschaft QR.Meine Mathematik ist heutzutage sehr rostig, aber ich frage mich, warum Ilnumerics so große Anstrengungen unternehmen und das nicht tun würden. Laut Matlab ist es nur: "Wenn m> n, werden nur die ersten n Spalten von Q und die ersten n Zeilen von R berechnet. Wenn m <= n ist, ist das das Gleiche wie [Q, R] = qr (A) . " Vielleicht sehe ich es nicht, aber das scheint für ilnumerics nicht schwierig zu implementieren. Ich muss etwas übersehen. Vielleicht haben sie es für ein zukünftiges Datum auf dem Radar. – hoonto

2

qr in ILNumerics hat eine Überlast ILMath.qr (A, outR, outE, economy), die eine Zerlegung dieser Economy-Größe ermöglicht.

+1

Ich habe diese Option irgendwie verpasst ... Ich werde es überprüfen, danke! – Leeor

Verwandte Themen