映画のレコメンデーションシステムにはMahoutを使用する予定です。また、モデル構築にはSVDを使用する予定です。
新しいユーザーが来たとき、私たちは彼/彼女に特定の数の映画(例えば10)を評価するように要求します。
問題は、この新しいユーザーに推奨を行うために、モデル全体を再構築する必要があることです。
これにもっと良い方法はありますか?
ありがとう
はい...ただし、Mahout ではありません。そこにある実装は、データモデルの定期的なリロードと再構築を中心に構築されています。一部の実装では、近隣ベースの実装など、新しいデータをオンザフライで使用できます。SVDベースのインメモリがこれを行うとは思わない(私は書いていない)。
理論的には、最初のクリックまたは評価から、ターゲットのアイテム/映画をフォールドインによってユーザー機能スペースに投影することで、推奨を開始できます。大幅に単純化するには、入力 A のランク k 近似因数分解が Ak = Uk * Sk * Vk' である場合、新しいユーザー u に対して、更新用に新しい行 Uk_u が必要です。あなたはA_uを持っています。
Uk = Ak * (Vk')^-1 * (Sk)^-1. 幸いなことに、右側の 2 つの逆関数は自明です。(Vk')^-1 = Vk は正規直交列があるためです。(Sk)^-1 は、Sk の対角要素の逆数を取るだけの問題です。
Uk_u = Ak_u * (Vk')^-1 * (Sk)^-1. Ak_u はありませんが、ほぼ同じ A_u があるので、それを使用します。
Mahout が好きで、行列分解が好きなら、ALS アルゴリズムを検討することをお勧めします。それはより単純なプロセスなので、より高速です (ただし、折り畳みが少し難しくなります -私が行った最近の説明の最後を参照してください)。レコメンデーションにうまく機能します。
フォールドインは実装されていませんが、これは Mahout にも存在します。私が Mahout から作業を継続しているMyrrixは、これらすべてを実装しています。