問題タブ [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.

0 投票する
3 に答える
3811 参照

python - 大規模な疎行列での高速な非負行列因数分解

大規模な疎行列 (1% 未満の値 > 0) での非負行列因数分解に Scikit-learn (v 0.15.2) を使用します。行列のゼロ以外の値でのみエラーを最小化して (つまり、ゼロであるエントリのエラーを計算しない)、スパース性を優先して因子を見つけたいと考えています。私がしようとしていることに何か問題があるかどうかはわかりません。scikit-learn パッケージの NMF と ProjectedGradientNMF は、以前はうまく機能していました。しかし、行列のサイズが大きくなると、因数分解が非常に遅くなるようです。

> 10 ^ 10 セルの行列について話しています。~10^7 セルのマトリックスの場合、実行時間は良好であることがわかりました。

使用したパラメーターは次のとおりですnmf_model = NMF(n_components = 100, init='nndsvd', random_state=0, tol = 0.01, sparseness='data')

わずかに異なるパラメーターを試してみると ( に変更init=random)、次の警告が表示されます。警告の後、スクリプトの実行は停止します。

これを高速化し、上記の問題を解決する方法はありますか? numpy のスパース マトリックス (列と行のスパース) を使用してみましたが、驚くべきことに、より小さいマトリックス (~10^7 セル) で行ったテストでは遅くなります。

このような因数分解を複数回実行する必要があることを考えると (因子の理想的な数と k 分割交差検証を選択するために)、この問題を解決するためのより高速な方法が非常に望ましいです。

また、sklearn または Pyhon に基づいていないパッケージ/ツールの提案も受け付けています。パッケージ/ツールの選択に関する質問は推奨されないことは理解していますが、そのような特定のユースケースでは、現場の他の人がどのような手法を使用しているかを知っておくと非常に役立ちます.

0 投票する
1 に答える
2033 参照

apache-spark - MLlib MatrixFactorizationModel recommendProducts(user, num) が一部のユーザーで失敗する

MatrixFactorizationModelを使用してモデルをトレーニングしALS.train()、現在は使用model.recommendProducts(user, num)して上位の推奨製品を取得しましたが、一部のユーザーではコードが次のエラーで失敗します。

上記の最初の行でわかるように、私は実行しています

それ以外の

後者は、私が使用している1.3.0 pysparkには実装されていないためです。とにかく、一部のユーザーの予測を正しく返しますが、他のユーザーでは失敗します。

私が要求している正確な数の予測がない可能性があることは理解しています。返される数は少なくなると思います。

0 投票する
3 に答える
3436 参照

matlab - 非負行列因数分解: 交互最小二乗法

交互最小二乗法で NMF を実装しようとしています。問題の次の基本的な実装に興味があります。 ここに画像の説明を入力

私の理解が正しければ、この疑似コードに記述されている各行列方程式を、非負の制約なしで、閉じた形式の解法で解決し、負のエントリを 0 に設定することができます。この理解は正しいでしょうか?これは、たとえば射影勾配降下を使用する、より複雑で制約のある最適化問題の基本的な代替手段ですか? さらに重要なことは、この基本的な方法で実装された場合、アルゴリズムに実用的な価値があるでしょうか? 変数削減の目的で NMF を使用したいのですが、NMF を使用することが重要です。これは、私のデータが定義上非負であるためです。私はこれについて意見を求めています。

0 投票する
0 に答える
119 参照

linear-algebra - 解く線形方程式の最大サイズ? (X=AX+B)

これは、今日の最速のハードウェアで解かれる一連の線形方程式の最大サイズに関する非常に一般的な質問です。形式は次のとおりです。

X = AX + B

A: 浮動小数点数の NxN 行列で、スパースです。

B: 浮動小数点数の N-ベクトル。

X について解いてください。

これは X(IA) = B になり、ここで読んだように因数分解 (逆行列ではない) を使用して解決するのが最適です。

http://www.johndcook.com/blog/2010/01/19/dont-invert-that-matrix/

あなた自身を知っていますか、または今日の最速のハードウェアで N の最大値を与えるベンチマークまたは論文への参照を持っていますか? 私が見たほとんどのベンチマークは、N < 10,000 を使用しています。N>10x10^6以上を1ヶ月以内に処理しようと考えています。

計算次元だけでなく、A のストレージも考慮してください。問題になる可能性があります。たとえば、N = 1 x 10^6 と仮定すると、ストレージは 1x10^12 x 4 バイト / (1024x1024x1024) = 4 テラバイトになります。これは扱いやすいと思います。

最後に、システムを解決する方法を並列化して、並列化により N がかなり大きくなる可能性があると仮定できますか?

前もって感謝します、ブリアコ

0 投票する
0 に答える
824 参照

algorithm - Householder QR 分解のためにこの MATLAB コードを一般化する方法

Householder QR 因数分解の最初のステップで行ったコードを一般化するために、助けを求めています。私は次のことをしました:

残りの手順を実行するために、次のことを試しました。

しかし、うまくいきませんでした。次のようなエラーが表示されます。

R1(5,3) にアクセスしようとしました。size(R1)=[4,3] であるため、インデックスが範囲外です。

Householderfactorization のエラー (33 行目) beta=-sqrt(R1(k+j,k)'*R1(k+j,k));

そのため、アルゴリズムを取得する別の方法を検索しようとしましたが、これを行う方法がわかりません。明確にするためにKincaid&Cheney初版の「Numerical analysis」という本を読みましたが、読んだ後私はもっ​​と混乱しています(少し混乱していますが、私が見つけた中で最も簡単なので、本でアルゴリズムを実行したいと思います)。

誰かがこのアルゴリズムを正しい方法で実行するのを手伝ってくれますか?

注: この本はHereにあります。実際には 253 ページにあります。つまり、最初の部分の後の部分のアルゴリズムを MATLAB コードに変換したいということです (つまり、私が話している一般化です)。このアルゴリズムの問​​題は、2 番目のステップを計算して転送する場合、前の行列を考慮する必要があり、たとえば A(:,1) を [R1(2,2),R1 に変更する必要があることです。 (3,2),R1(4,2)]' そして、この新しいベクトルを使用して最初のステップで行ったすべてを計算するため、このプロセスは、これを MATLAB に変換する方法がわからないプロセスです。最初のステップは簡単ですが、他のステップは難しいです。

0 投票する
1 に答える
80 参照

matlab - matlab の qr 因数分解アルゴリズムのエラー

Matlab を使用して QR 分解を実装し、行列 A = [1 2; でテストすることになっています。1 1; 2 3; 2 2]。これが今まで書いてみたコードです。しかし、いくつかのエラーが発生しており、どこに問題があるのか​​ わかりません。誰でもそれを見つけることができますか?

0 投票する
0 に答える
315 参照

vowpalwabbit - vowpal wabbit で行列因数分解を使用して機能名を取得するためにハッシュを反転できない

--invert_hash は回帰モデルで問題なく動作しますが、行列分解を有効にすると、出力は --readable_model と --invert ハッシュの両方で同じになります。各ユーザーまたはアイテムの潜在変数を確認したいのですが、それらをアイテム/ユーザーの名前と一致させることができません。私の完全なデータセットをすべて表示するのではなく、この小さな再現可能なサンプルで問題を説明します。

結果は次のようになります。

これらの行には、文字列 'user1'、'user2'、'item1'、または 'item2' が含まれていません。何か不足していますか?

もう 1 つの質問ですが、ドキュメントで答えを見つけることができませんでした。ランク = 2 であるため、イベントごとに 5 つの潜在変数があるのはなぜですか?

0 投票する
0 に答える
1068 参照

machine-learning - NMF 疎行列分析 (SKlearn を使用)

私を正しい軌道に戻すための簡単なアドバイスを探しています。sparse.coo_matrix に格納されている非常にまばらな入力行列 (情報の約 25% が埋められ、残りは 0) がある問題の解決策に取り組んでいます。

データセットからこの配列を作成し、他のオプションをいじる作業を行った後、現在、NMF モデルフィッター関数を次のように定義しています。

さて、問題は私の出力が 0 の値を正しく考慮していないように見えることです。0 だった値は 1 未満の値にぶつかり、既知の値は実際の値からかなり変動します (すべてのデータは 1 から 10 の間の評価です)。誰かが私が間違っていることを見つけることができますか? scikit のドキュメントから、nndsvd の初期化を使用すると、空の値が正しいことを説明できると思いました。出力例:

経験豊富な ML コーダーが提供できるアドバイスに感謝します!