大规模稀疏矩阵的奇异值分解Java实现

8

我想知道是否有人知道针对大型稀疏矩阵的java奇异值分解(SVD)实现?我需要这个实现来进行潜在语义分析(LSA)。

我尝试过UJMP和JAMA的软件包,但当行数≥1000且列数≥500时它们会出现问题。如果有人能指点我一些伪代码或其他资源,那将不胜感激。


2
另一个问题的答案(http://stackoverflow.com/questions/1750463/singular-value-decomposition-implementation)几乎相同,建议尝试使用[Colt](http://acs.lbl.gov/~hoschek/colt/)。 - Charles Goodwin
1
嗯,Colt和JAMA中SingularValueDecomposition类的代码几乎完全相同。此外,该代码仅适用于m > n(行数大于列数)的情况。另外,我认为这些算法对于稀疏矩阵并没有进行优化。 - jake
m > n 的条件对我来说并不是什么问题。实际上,对于我来说,99.99%的情况下,m > n 总是成立的(行代表单词,列代表文档)。只是这个限制没有被清楚地记录下来。 - jake
1
其中m = 2810,n = 2809,使用colt花费了25分钟。不错。 - jake
看看 la4j.decomposition。它可能会有所帮助。 - Gaurav Koradiya
1个回答

4
这里有一份维基百科上关于Java数值库的列表。NIST库非常不错,但不支持稀疏矩阵。我对其他软件包不是很熟悉,你可以看看Colt,它也非常高质量,并且能够处理某些操作的稀疏矩阵;虽然我不知道它是否支持SVD,但我认为应该可以。我还听说UJMP也值得一看。

编辑:很抱歉听到UJMP无法解决你的问题。我曾听说过它值得一看。


1
谢谢,那个列表很有帮助。如果有人感兴趣,Apache Commons Math包确实有一个SVD实现。它只迭代30次,并抛出异常。深入挖掘代码后,不明显如何增加此次数(因为有类中的类中的类)。 - jake
它在后面使用Jama svd. - Gaurav Koradiya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接