Рандомизированный SVD для LSALSI в среде Windows

Я работаю над проектом, который включает использование скрытого семантического анализа (LSA). Это требует использования декомпозиции сингулярных значений (SVD), иногда на больших наборах данных. Существует ли реализация randomized-SVD (rSVD), доступная для среды WindowsVisual Studio? Я видел проект под названием redsvd, но кажется, что он поддерживается только в Linux.

2 ответов


ILNumerics может иметь его, но я не видел, делают ли они rSVD, и у меня нет личного опыта работы с библиотекой, но он доступен через NuGet к счастью.

http://ilnumerics.net

вот документы по их реализации 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), который позволяет выполнять декомпозицию размера экономики.