問題タブ [matrix-factorization]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - ALS を使用した行列因数分解は、R の大きな行列に対して暗黙的なゼロを使用するため、パフォーマンスが非常に遅くなります。
R で交互最小二乗法 (ALS) を使用して行列分解を実行したいと考えています。コードは小さな行列では正常に機能しますが、大きな行列では信じられないほど遅くなります。プロセスをスピードアップするための助けをいただければ幸いです。私は RRopen 8.01 を使用しているため、既に複数のコアで実行されていMKL
ます。
暗黙的なフィードバック行列としてバイナリ行列を利用しています。さらに、重み付けマトリックスを実装しました。
これが私がしたことです:
次のパラメーターを設定します。
ユーザーとアイテムの初期マトリックスを作成する
そして今、私は ALS で行列因数分解を実行します
R.hat
は目的の終了行列です。
w.err
反復中のエラーの単なるコントロールです。プロットに最適:)
コードはそのままで問題なく動作します。R
(および)の行と列の数を増やすとW
、パフォーマンスが大幅に低下します。nr=200, nr=500
としましょうnr=2000, nr=5000
。
NMF
負の値が可能であるため、またはパッケージを使用しませんでしNMFN
た。したがって、非負の MF ではありません。パフォーマンスを向上させる方法を知っている人はいますか? 多分私は愚かで、私のコードはナンセンスです。改善点を指摘していただければ幸いです。
同様の質問を探しましたが、見つかりませんでした。たぶん私はそれを見落としただけです。
apache-spark - トップ N の推奨事項を生成するための MLlib 協調フィルタリング
MLlib の ALS 行列因数分解を使用して、すべてのユーザーに上位 n 件の推奨事項を生成する方法を探していましたが、成功しませんでした。そのような方法は存在しますか?
algorithm - 置換行列を使用したスパース行列のコレスキー分解
大きな疎行列のコレスキー分解に興味があります。私が抱えている問題は、コレスキー因子が必ずしもスパースではないということです (2 つのスパース行列の積が必ずしもスパースであるとは限らないように)。
たとえば、最初の行、最初の列、および対角線に沿ってのみ非ゼロの行列の場合、コレスキー因子は 100% 埋められます (下側および上側の三角形は 100% 密です)。下の画像では、グレーはゼロではなく、白はゼロです。
私が知っている 1 つの解決策は、順列P行列を見つけてP T APのコレスキー分解を行うことです 。たとえば、最初の行を最後の行に移動し、最初の列を最後の列に移動する順列行列を適用することによる同じ行列では、コレスキー因子はまばらです。
私の質問は、一般的にPを決定する方法ですか?
AとP T APのコレスキー分解と、より現実的な行列との違いを理解するには、下の画像を参照してください。これらの画像はすべてhttp://www.seas.ucla.edu/~vandenbe/103/lectures/chol.pdfから取得しました
講義ノートによると
適切な置換行列 P を選択するための多くのヒューリスティックな方法 (ここでは取り上げません) が存在します。
これらのメソッドのいくつかを知りたいです (C、C++、または Java のコードが理想的です)。
java - Java での大きな疎行列のコレスキー分解
Java で大規模な疎行列のコレスキー分解を実行したいと考えています。現在、Parallel Coltライブラリ クラスSparseDoubleCholeskyDecompositionを使用していますが、JNI を使用して Java で使用する高密度行列用に C で記述したコードを使用するよりもはるかに遅いです。
たとえば、SparseDoubleCholeskyDecomposition を使用した 0.25% の非ゼロ密度の 5570x5570 行列の場合、因数分解に26.6 秒かかり、高密度ストレージを使用する同じ行列の自分のコードは1.12 秒しかかかりません。ただし、密度を 0.025% に設定すると、colt ライブラリは 0.13 秒しかかかりません。
また、圧縮された行ストレージと OpenMPを使用して、C で独自の疎行列コレスキー分解を作成しました。これは、SparseDoubleCholeskyDecomposition よりもかなり高速ですが、密なストレージを使用するアルゴリズムよりも遅いです。おそらくさらに最適化することもできますが、いずれにしてもコレスキー因子が密集しているため、速度もストレージの問題も解決されません。
しかし、ミリ秒単位の時間が必要であり、最終的には 10000x10000 を超えるマトリックスにスケーリングする必要があるため、密なマトリックス用の独自の密なコードでさえ遅くなり、メモリを使いすぎます。
疎行列のコレスキー分解は、はるかに高速に実行でき、メモリ使用量も少ないと信じる理由があります。たぶん、より良い Java BLAS ライブラリが必要ですか? 疎行列のコレスキー分解を効率的に行うJava用のライブラリはありますか? Parallel Colt を最適に使用していない可能性があります。
cuda - キュブラのコレスキー分解
私はcudaプログラミングが初めてです。小さな行列 (8*8) に対してコレスキー分解を実行したいのですが、CUBLAS バッチ関数を使用してそれを取得するアルゴリズムはありますか?
cuda バージョン 6.5
ありがとうございました
c++ - さまざまな b に対するスパース バンド Ax=b のバッチ CUDA ソリューション
まばらなバンド行列 A があり、Ax=b を (直接) 解きたいと思います。私は約 500 個のベクトル b を持っているので、対応する 500 個の x を解きたいと思います。私はCUDAを初めて使用するので、利用可能なオプションについて少し混乱しています。
cuSOLVER には QR hereを使用したスパース A_i x_i = b_i のバッチ ダイレクト ソルバー cuSolverSP があります。(A は適切に条件付けられているので、LU でも問題ありません。) しかし、私が知る限り、すべての A_i が同じであるという事実を利用することはできません。
別のオプションは、最初に CPU または GPU でスパース LU (QR) 因数分解を決定し、次に GPU で逆代入 (それぞれ backsub と matrix mult) を並行して実行することでしょうか? cusolverSp < t >csrlsvlu()が 1 つの b_i に対するものである場合、複数の b_i に対してこの操作をバッチで実行する標準的な方法はありますか?
最後に、私はこれについて直感を持っていないので、必要なオーバーヘッドを考慮して、これらのオプションのいずれかで GPU の高速化を期待する必要がありますか? x の長さは ~10000-100000 です。ありがとう。
python - Sympy: 有限体で行列を解く
私のプロジェクトでは、行列 Y と K を指定して行列 X を解く必要があります。(XY=K) 各行列の要素は、ランダムな 256 ビット素数を法とする整数でなければなりません。この問題を解決するための最初の試みは、SymPy のmod_inv(n)
関数を使用しました。これに関する問題は、約 30 のサイズの行列でメモリが不足していることです。次に考えたのは、行列の因数分解を実行することでした。ただし、SymPy には、数を法とする行列を見つけることができるソルバーが含まれていないようです。使用できる回避策や自作のコードはありますか?