-1

シナリオは次のようになります。

私は apache mahaout を使用してレコメンダーを作成しようとしています。類似性マトリックスを生成し、アイテム間の類似性を判断するためのサンプル設定 (ユーザー、アイテム、設定値) データがあります。しかし、実際の嗜好データは、サンプルの嗜好データよりもはるかに大きくなります。実際の嗜好データに存在する項目 ID のリストは、すべてサンプル嗜好データにも存在します。ただし、サンプル データのユーザー ID は、実際のデータよりもはるかに少なくなっています。

ここで、実際のデータでレコメンダーを実行しようとすると、サンプル データにユーザー ID が存在しなかったため、ユーザー ID が存在しないというエラーが表示され続けます。mahout のレコメンダーに新しいユーザー ID とその設定を挿入して、アイテム間の類似性に基づいてオンザフライでユーザーのレコメンデーションを生成するにはどうすればよいですか? または、新しいユーザー向けのレコメンデーションを生成する他の方法がある場合は、提案してください。

ありがとう。

4

1 に答える 1

0

項目間の類似度を計算するためのサンプル データが完成していると思われる場合は、それらを事前に計算してCollection<GenericItemSimilarity.ItemItemSimilarity> corrMatrix = new ArrayList<GenericItemSimilarity.ItemItemSimilarity>();、事前に計算された類似度を保存するために使用しないでください。ItemSimilarity次に、これから次のように作成できます。ItemSimilarity similarity = new GenericItemSimilarity(correlationMatrix);

多くの有用なデータが欠落している可能性があるため、好みの値に基づいてアイテム間の類似性を計算するためにデータのサンプルを使用することはお勧めできません。その場で計算するのは遅いと思われる場合は、いつでも事前に計算してデータベースに保存し、必要なときにロードできます。

それでもこのエラーが発生する場合は、レコメンデーション クラスでサンプル データ モデルを使用しているかUserSimilarity、アイテムの類似度を計算している可能性があります。

新しいユーザーを追加したい場合は、Mahout を使用FileDataModelして、新しいユーザーを含めることで定期的にファイルを更新できます (いくつかのサフィックスを付けて新しいファイルを作成できると思いますが、よくわかりません)。詳細については、 Mahout in Actionという本を参照してください。インメモリDataModel実装は不変です。setPreference()メソッドとを実装することで、それらを拡張できますremovePreference()

EDITMutableDataModel :私は、を拡張するための実装を持っていAbstractDataModelます。必要に応じて共有できます。

于 2013-12-13T08:43:50.043 に答える