Windows环境下LSA \ LSI的随机SVD

时间:2013-06-09 07:49:37

标签: c# svd lsa

我正在开展一个项目,其中包括使用潜在语义分析(LSA)。 这需要使用奇异值分解(SVD),有时需要使用大数据集。 是否有适用于Windows \ Visual Studio环境的随机SVD(rSVD)实现?我看到了一个名为redsvd的项目,但它似乎只在Linux上受支持。

2 个答案:

答案 0 :(得分: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上编译。如果那些不符合您的需求,请告诉我,我将了解端口的复杂性。

<强>更新

今晚回家好,决定试一试。这是使用Visual Studio 2010在Windows上运行redsvd的一种非常快捷的方法。我将它发布在github上:

https://github.com/hoonto/redsvdwin

在Visual Studio中打开rsvd3.sln,构建它,然后在Debug目录中获得一个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,如果你想要带有main的Incr文件,请排除redsvdMain.cpp并包含redsvdMainIncr.cpp。由于两者都有主要内容,我只是排除了Incr版本并构建了常规版本。

此外,我还在github存储库中包含了Eigen3标头,并将它们放入解决方案配置的附加包含中,因此您根本不需要操作它。

最后一件事,根据我对Visual Studio的了解,没有cxxabi.h这样的东西,所以我做了一些作弊,你会看到我做了哪些更改,因为它们会被这样评论:< / p>

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

等等。因此,如果您需要进行调整,您就会知道我的更改在哪里。

答案 1 :(得分:2)

ILNumerics中的

qr有一个过载ILMath.qr(A,outR,outE,经济),允许执行经济规模的分解。