【发布时间】:2012-10-08 06:32:00
【问题描述】:
我正在寻找一个快速的 svd 库,可以使用 c、c++ 或 java。最终我使用的是 Java,但我很喜欢使用 jna 来包装 c++,例如http://github.com/hughperkins/jeigen
我正在寻找一个能够处理稀疏矩阵的快速 svd 库。为了保持这个客观性,这样问题就不会被标记为过于主观,让我们说:
- 与 news20.binary 一起使用,例如来自http://mldata.org/repository/data/viewslug/news20binary/
- 运行需要多快?
- 保留了多少方差,例如对于大小为 6 或 20 的 S 矩阵?
我环顾了几个图书馆,发现:
- 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,好像你已经实现了这个。想要发送拉取请求?