【问题标题】:Fast accurate sparse svd library? [closed]快速准确的稀疏 svd 库? [关闭]
【发布时间】:2012-10-08 06:32:00
【问题描述】:

我正在寻找一个快速的 svd 库,可以使用 c、c++ 或 java。最终我使用的是 Java,但我很喜欢使用 jna 来包装 c++,例如http://github.com/hughperkins/jeigen

我正在寻找一个能够处理稀疏矩阵的快速 svd 库。为了保持这个客观性,这样问题就不会被标记为过于主观,让我们说:

我环顾了几个图书馆,发现:

  • matlab:超级快,大约 10 秒,但它并不是真正的“库”。平均平方投影误差:0.93
  • redsvd:超快,运行约 1 秒,针对 6 个特征,但平均平方投影误差为 0.97,非常高
  • Eigen 的 svd 非常慢,并且仅适用于密集矩阵
  • svdlibc:在我停止之前运行了 28 分钟;我想它是在计算完整的 S,而不仅仅是前 6 个特征左右

基本上,我正在寻找一个库,它提供的速度和平均平方投影误差与 matlab 大致相同,或者至少具有可比性。

【问题讨论】:

  • 你在找什么算法? Randomized PCA(不是 c++/java,但我认为是正确的算法)用于 20 个新闻组 x 10k 功能,6 台 PC --> 7.0 sec pca explained_variance_ratio_ .79 .062 .044 .039 .031 .03
  • 我很惊讶 Eigen 的 SVD 这么慢。我从来没有为此使用Eigen。自从您上次提出这个问题以来,情况是否有所改善?
  • @Z boson,好像你已经实现了这个。想要发送拉取请求?

标签: java c++ c matrix svd


【解决方案1】:

根据我的经验,svdlibc 是这些选项中最好的库。我之前已经对它的代码进行了一些研究,但我不相信它正在计算完整的 S 矩阵(即,它是一个真正的“薄 svd”)。如果您可以控制磁盘上的矩阵表示,则 svdlibc 在使用稀疏二进制输入格式时会执行得更快,因为 I/O 开销显着降低。

S-Space 包在 SVDLIBC 的 SVDLIBJ java 端口周围提供了一个executable jar。但是,他们发现对于某些输入解决方案,它的结果与 SVDLIBC 不同。

【讨论】:

  • 好的。你知道我如何请求命令行版本只返回前 6 个特征,而不是计算整个矩阵吗?
猜你喜欢
  • 1970-01-01
  • 2014-07-14
  • 2011-06-24
  • 2023-03-02
  • 1970-01-01
  • 1970-01-01
  • 2017-12-05
  • 2023-03-25
  • 2015-04-07
相关资源
最近更新 更多