Рандомизированный SVD для LSALSI в среде Windows
Я работаю над проектом, который включает использование скрытого семантического анализа (LSA). Это требует использования декомпозиции сингулярных значений (SVD), иногда на больших наборах данных. Существует ли реализация randomized-SVD (rSVD), доступная для среды WindowsVisual Studio? Я видел проект под названием redsvd, но кажется, что он поддерживается только в Linux.
2 ответов
ILNumerics может иметь его, но я не видел, делают ли они rSVD, и у меня нет личного опыта работы с библиотекой, но он доступен через NuGet к счастью.
вот документы по их реализации SVD:
http://ilnumerics.net/apidoc/Index.html?topic=html/Overload_ILNumerics_ILMath_svd.htm
есть также NAG, но его платный: http://www.nag.co.uk/numeric/numerical_libraries.asp
Я также проверил redsvd, и я готов поспорить, что могу либо перенести его на C# для вас, либо, по крайней мере, заставить его компилироваться в windows. Если они не отвечают вашим потребностям, дайте мне знать, и я посмотрю на сложность порт.
обновление:
хорошо, пришла домой вечером и решил дать ему шанс. Вот очень быстрый способ заставить redsvd работать в Windows с помощью Visual Студия 2010. Я разместил его на github:
https://github.com/hoonto/redsvdwin
откройте rsvd3.sln в Visual Studio, создайте его, и вы получите rsvd3.exe в каталоге отладки.
выполнить, что:
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])
и там. Кстати, это создает redsvdMain.cpp, если вы хотите файл Incr с main it, исключите redsvdMain.cpp и включают redsvdMainIncr.СРР. Поскольку у обоих есть main в них, я просто исключил Incr версия и построенная регулярная версия.
кроме того, я включил собственные заголовки 3 в репозиторий github и поместил их в дополнительные Include для конфигурации решения, поэтому вам не нужно возиться с этим вообще.
и последнее, нет такой вещи, как cxxabi.h насколько мне известно, для Visual Studio, поэтому я сделал некоторый обман, вы увидите, где я внес изменения, потому что они будут прокомментированы следующим образом:
//MLM: commented next 3
//...
//...
//...
//MLM: added 1
...
и так далее. Так что если вам нужно внести коррективы, вы будете знать, где мои изменения.
qr в ILNumerics имеет перегрузку ILMath.qr (A, outR, outE, economy), который позволяет выполнять декомпозицию размера экономики.