2

私は実際のユーザーデータを使って映画推薦システムを実装しています。協調フィルタリング方式を採用する予定でした。ただし、この種の方法には通常、ユーザーに評価された映画を保存する巨大なマトリックスが含まれます。私は1万本以上の映画と10万人のユーザーを持っているので。このような巨大なスパース行列を作成することは不可能です。こんなに大量のデータを使って、どうやって協調フィルタリングを実装しているのだろうか。ありがとう!

4

2 に答える 2

4

分散コンピューティングのフレームワークをお勧めしますが、それでも1台のマシンで簡単に処理できる規模だと思います。

Apache Mahoutには、1台のマシンで拡張できるように設計されたTaste協調フィルタリングライブラリが含まれています。のモデル-何、1000万のデータポイント?-正常なヒープサイズでメモリに収まる必要があります。GenericItemBasedRecommenderとのようなものを見てくださいFileDataModel

(MahoutにもHadoopに基づく分散実装がありますが、これはまだ必要ないと思います。)

私はその作者ですが、その後、大規模な推奨者をMyrrixとして商品化するようになりました。また、無料のオープンソースであるスタンドアロンのシングルマシンバージョンも含まれています。また、1台のマシンでこの量のデータを簡単に処理できます。たとえば、これはこの例で使用されているものよりも小さいデータセットです。Myrrixには分散実装もあります。

GraphLabのように、上記以外にも高速分散実装があります。MyMediaLiteのように、他の非分散フレームワークもおそらく十分に高速です。

これらのいずれかを使用することをお勧めします。または、実際に「どのように」発生するのか疑問に思っている場合は、ソースコードをチェックして、データ表現を確認してください。

于 2013-03-13T10:16:41.163 に答える
0

データの保存にマトリックス形式を使用しませんでした。代わりに、C ++を使用して、必要な変数と配列を含むUser、Rating、Itemなどの構造体を作成します。これにより、アルゴリズムが複雑になる可能性がありますが、メモリを効率的に節約できます。

于 2013-05-29T19:36:40.677 に答える