問題タブ [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.
hadoop - Hadoop の Mahout Matrix Factorization Recommender は非常に遅い
私は現在、以下を使用して Hadoop で Mahout の (バージョン 0.8) Matrix Factorization Recommender を実行しています。
mahout recommendfactorized -i mahout_parallelALS_output/userRatings/ -o recommends/ --userFeatures mahout_parallelALS_output/U/ --itemFeatures mahout_parallelALS_output/M/
--numRecommendations 10
マップ フェーズを完了するのに非常に長い時間がかかります (4 時間以上かかりますが、現在のところマップ ジョブの 3% しか完了していません)。これは私には非常に珍しいことです。私が間違っているのか、それとも何らかの形でパフォーマンスを最適化するのか、誰かに教えてもらえますか?
python - 行列の因数分解に辞書を使用すると、「nan」が Dictionary.values() に登場しました
LFM(潜在因子モデル)を使ったおもちゃレコメンドシステムを学び、構築しようとしていました。だから私はこのページで行列因数分解について何かを見つけます( http://www.quuxlabs.com/blog/2010/09/matrix-factorization-a-simple-tutorial-and-implementation-in-python/ )
そのページ内のコードは完全に実行できます。しかし、私の仕事では、初期化後に多くの要素が空白のままになるため、マトリックスは疎なものにする必要があります。だから私は辞書を使って書き直すと、すべてが台無しになります。
Webページに記載されているコードは次のとおりです。
このコードは問題なく動作します。そこで、次のコードを書きます。
これらの 2 つのセクションは同じ機能を持つ必要があり、構造はまったく同じです。しかし!私のコードが返すものは次のとおりです:
または P と Q を計算した後、次のように表示されます。
理由がわかりませんが、非常に悲しいことに、この方法を使用して推奨システムを完成させました。これが起こった理由を見つけるのを手伝ってもらえますか? お時間をいただきありがとうございました!
python - 行列の因数分解に辞書を使用し、因子ベクトルがどんどん大きくなる
潜在因子モデルを使ったおもちゃレコメンドシステムを構築しようとしています。だから私は単純に ( http://www.quuxlabs.com/blog/2010/09/matrix-factorization-a-simple-tutorial-and-implementation-in-python/ ) からコードをコピーして実行します。すべてが順調です。次に、辞書を使用してコードを書き直しましたが、何かがうまくいかず、理解できません。
元のコードは次のとおりです。
ステップごとに誤差が小さくなっていることがわかります。
そして私のコード:
前節とほぼ同じ。唯一の違いは、辞書を使って書いたことです。しかし、それは示しています:
ステップごとに誤差が大きくなっていて、とても戸惑っています。
お時間をいただきありがとうございました!
machine-learning - Apache Spark ALS 協調フィルタリングの結果。彼らは意味をなさない
このチュートリアルで説明されているように、MLlib を使用した協調フィルタリングのために Spark を試してみたかった: https://databricks-training.s3.amazonaws.com/movie-recommendation-with-mllib.html アルゴリズムは論文「Collaborative Filtering」に基づいています。暗黙的なフィードバック データセットの場合」、行列因数分解を行います。
1,000 万の Movielens データセットを使用して、すべてが稼働しています。データセットは、80% のトレーニング、10% のテスト、10% の検証に分割されます。
- RMSE ベースライン: 1.060505464225402
- RMSE (トレイン) = 0.7697248827452756
- ランク = 24、ラムダ = 0.1、および反復 = 10 でトレーニングされたモデルの RMSE (検証) = 0.8057135933012889。
- 最良のモデルは、ベースラインを 23.94% 改善します。
トレーニング パラメータは異なりますが、チュートリアルと同様の値です。
アルゴリズムを数回実行してみましたが、常に意味のない推奨事項が表示されました。子供向けの映画だけを評価しても、次の結果が得られます。
評価について:
- 個人的評価: トイ・ストーリー (1995) 評価: 4.0
- 個人的評価: ジャングル・ブック、ザ (1994) 評価: 5.0
- 個人的評価: ライオン キング、ザ (1994) 評価: 5.0
- 個人的評価: メリー・ポピンズ (1964) 評価: 4.0
- 個人的評価: 不思議の国のアリス (1951) 評価: 5.0
結果:
あなたにおすすめの映画:
- おはるの生涯 (西角一代女) (1952)
- もっと (1998)
- Who's Singin' Over There? (aka Who Sings Over There) (コとタモ ペヴァ) (1980)
- 日曜日とキュベール (ディマンシュ・ド・ヴィル・ダヴレー、レ) (1962)
- 青い光、 (Das Blaue Licht) (1932)
- ハーヴェイ・ミルクの時代 (1984)
- 私に投票してください (2007)
- 木を植えた男、The (Homme qui plantait des arbres, L') (1987)
- ショーシャンクの空に (1994)
- 昨日だけ (思い出でポロポロ) (1991)
Only 昨日以外は意味がないようです。
これらの結果を解釈する方法やより良い結果を得る方法を知っている人がいる場合は、知識を共有していただければ幸いです。
よろしくお願いします
編集:
提案されたように、より多くの要因を使用して別のモデルをトレーニングしました。
- ベースライン エラー: 1.0587417035872992
- RMSE (トレイン) = 0.7679883378412548
- ランク = 100、ラムダ = 0.1、および numIter = 10 でトレーニングされたモデルの RMSE (検証) = 0.8070339258049574。
と別の個人的な評価:
- 個人的評価: スター・ウォーズ: エピソード VI - ジェダイの帰還 (1983) 評価: 5.0
- 個人的評価: ミッション: インポッシブル (1996) 評価: 4.0
- 個人的評価: ダイ・ハード: 復讐を持って (1995) 評価: 4.0
- 個人的評価: バットマン フォーエバー (1995) 評価: 5.0
- 個人的評価: メン・イン・ブラック (1997) 評価: 4.0
- 個人的評価: ターミネーター 2: 審判の日 (1991) 評価: 4.0
- 個人的評価: トップガン (1986) 評価: 4.0
- 個人的評価: スター・ウォーズ: エピソード V - 帝国の逆襲 (1980) 評価: 3.0
- 個人的評価: エイリアン (1979) 評価: 4.0
おすすめの映画は次のとおりです。
あなたにおすすめの映画:
- カルメン (1983)
- Silent Light (Stellet licht) (2007)
- ジーザス (1979)
- おはるの生涯 (西角一代女) (1952)
- ハート・オブ・アメリカ (2003)
- For the Bible Tells Me So (2007)
- もっと (1998)
- リー・バワリーの伝説 (2002)
- お葬式 (おそしき) (1984)
- ザ・ロングショット (2008)
有用な結果は 1 つもありません。
EDIT2:暗黙のフィードバック方法を使用すると、はるかに良い結果が得られます! 上記と同じアクション映画での推奨事項は次のとおりです。
あなたにおすすめの映画:
- スター・ウォーズ: エピソード IV - 新たなる希望 (別名スター・ウォーズ) (1977)
- ターミネーター (1984)
- 失われたアークの侵略者 (インディアナ・ジョーンズと失われたアークのレイダース) (1981)
- ダイ・ハード (1988)
- ゴッドファーザー (1972)
- エイリアン (1986)
- ロック、ザ (1996)
- 独立記念日 (別名 ID4) (1996)
- スタートレック II: カーンの逆襲 (1982)
- ゴールデンアイ (1995)
それは私が期待した以上のものです!問題は、なぜ明示的なバージョンがまあまあ悪いのかということです
apache-spark - Spark MatrixFactorizationModel ですべてのユーザーと製品の組み合わせをスコアリングする方法は?
MatrixFactorizationModelが与えられた場合、ユーザー製品予測の完全なマトリックスを返す最も効率的な方法は何でしょうか (実際には、スパース性を維持するために何らかのしきい値でフィルター処理されます)?
現在の API を介して、user-product のデカルト積を予測関数に渡すことができましたが、これは多くの余分な処理を行うように思えます。
プライベートな userFeatures、productFeatures へのアクセスは正しいアプローチでしょうか?もしそうなら、フレームワークの他の側面を利用してこの計算を効率的な方法で分散する良い方法はありますか? 具体的には、userFeature、productFeature のすべてのペアを「手で」乗算するよりも簡単に行う方法はありますか?
matlab - 行列分解出力の AUC メトリックを計算する
Initial Matrix には、リンク予測システム1
の既知のリンク (未知のエントリや見逃したエントリ) が含まれています。0
Matrix Factorization の出力は、計算に失敗したエントリの予測値ですAUC
。
20%
既知のリンクの非表示 (マトリックス内のto20%
のエントリのセット)1
0
- 因数分解の出力をソートし、トレーニングに使用されるインデックスを破棄します (
80%
of1
) N
非表示の値の数に設定- 上位の予測値を取得
N
し、非表示の値 (クラス ラベルを に設定1
) かどうか (クラス ラベルを に設定)0
をチェックします。 - 上位の予測
AUC
を使用して計算するN
私perfcurve
は matlab 計算AUC
で知っていますが、 のラベル付きデータを提供するには、上記のプロセスについて確認する必要がありますperfcurve
。
どんなコメントでも本当に感謝しています。