3

c、c ++、またはjavaのいずれかで高速なsvdライブラリを探しています。最終的には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分間実行しました。最初の6つの機能だけでなく、完全なSを計算していると思います

基本的に、私はmatlabとほぼ同じ速度と平均二乗投影誤差、または少なくともある程度同等の速度と平均二乗投影誤差を提供するライブラリを探しています。

4

1 に答える 1

3

私の経験から、svdlibc はこれらのオプションの最適なライブラリです。私は以前にそのコードを少し掘り下げましたが、完全な S 行列を計算しているとは思いません (つまり、それは真の「薄い svd」です)。ディスク上の行列表現を制御できる場合、スパース バイナリ入力形式を使用すると、I/O オーバーヘッドが大幅に減少するため、svdlibc の実行速度が大幅に向上します。

S-Space Package は、SVDLIBC の SVDLIBJ Java ポートの周りに実行可能な jarを提供しました。ただし、特定の入力ソリューションでは、SVDLIBC とは異なる結果になることがわかりました。

于 2012-10-30T22:30:03.680 に答える