2012-10-08 55 views
3

我正在尋找一個快速的svd庫,無論是c,C++還是java。最終我使用Java,但我很舒服使用jna來包裝c + +,例如http://github.com/hughperkins/jeigen快速準確稀疏的svd庫?

我正在尋找一個快速的svd庫,將處理稀疏​​矩陣。爲了保持這個目標,所以這個問題不會被標記爲過於主觀,讓我們說:

我看了看周圍的幾個庫,結果發現:

  • MATLAB:超快,約10秒,但它不是一個真正的「庫」這樣。平均平方預測誤差:0.93
  • redsvd:超快速,約1秒的運行,爲6點的特性,但平均平方預測誤差爲0.97,這是非常高的
  • 徵的SVD是兩個很慢,只爲密集矩陣
  • svdlibc:跑了28分鐘才停止它;我想這是計算滿S,而不僅僅是最初的6個功能左右

基本上,我正在尋找,提供有關相同的速度和平均平方預測誤差爲MATLAB,或至少一個庫,有點可比。

+0

你在找什麼算法? [隨機PCA](http://scikit-learn.org/stable/modules/decomposition.html)(不是C++/java,但我認爲正確的算法)爲20個新聞組x 10k功能,6個電腦 - >'7.0秒pca explained_variance_ratio_ .79 .062 .044 .039 .031 .03'。 – denis

+0

我很驚訝Eigen的SVD太慢了。我從未使用過Eigen。自從你上次提出這個問題後,它有所改進嗎? –

+0

順便說一句,[你打算在JEigen中實現稀疏求解器的時候](https://stackoverflow.com/questions/17046585/cholmod-in-java/30526005#30526005)? –

回答

2

根據我的經驗,svdlibc是這些選項中最好的庫。我之前已經通過它的代碼挖了一下,我不相信它是在計算完整的S矩陣(即它是一個真正的「thin svd」)。如果您可以控制磁盤上的矩陣表示,由於I/O開銷顯着降低,使用稀疏二進制輸入格式時,svdlibc執行速度會快得多。

S-Space Package提供了圍繞SVDLIBC的SVDLIBJ java端口的executable jar。但是,他們發現它對某些輸入解決方案的效果與SVDLIBC不同。

+0

好的。你知道我怎麼可以請求命令行版本只返回前6個特徵,而不是計算整個矩陣? –