0

Mahout in Action ブックを読んで、分散型レコメンデーション エンジンの例を試しています。ただし、ウィキペディアのデータセットの代わりに、小さなデータセットを例として使用しています。

input.txt->

1,15
1,13
1,12
1,10
2,11
2,15
2,20
2,17
2,12
3,10

user.txt->

3

ここで、input.txt と user.txt は次の形式user,itemであり、input.txt はユーザーが過去に購入したアイテムを表し、user.txt は現在の購入を表します。

これら2つのファイルをhdfsにコピーして実行すると

hadoop jar mahout-core-0.5-job.jar \ org.apache.mahout.cf.taste.hadoop.item.RecommenderJob \ -Dmapred.input.dir=input/input.txt \ -Dmapred.output.dir=output - -usersFile 入力/user.txt --booleanData

マップ削減は適切に実行されます。ただし、出力をチェックするとbin/hadoop fs -cat output/ part-r-00000

空のファイルを見つけました。

誰かが私に何が悪いのか説明できますか? 私が正しく理解していれば、レコメンダージョブはアイテム間の類似性マトリックスを構築し、それをユーザーアイテムマトリックス(user.txtから)で乗算して結果を生成する必要があります。

理解の助けが必要です。単一ノードで Mahout 0.5 と hadoop 1.2 を使用しています。バージョンの互換性の問題ではないことを願っています。

編集

user.txt を次のように変更すると、回答が得られます

2

また

1

4

1 に答える 1

1

まず、Mahout 0.9 または現在のソース ビルドを使用します。0.5 は非常に古く、時代遅れです。本で使用されていることは知っていますが、多くの例は新しいコードでも機能します。

次に、データに共起がほとんどありません。レコメンダーがどのように機能するかを理解したい場合は、このブログ投稿を試してください。このような小さなデータセットを使用すると、共起が簡単に生成されず、空のレコメンデーションになります。投稿には、いくつかの rec を生成するように設計されているが、すべてのユーザーの rec を生成しないように設計された非常に小さなデータ セットがあります。

3 番目に、すべてのアイテムとユーザーに Mahout ID を使用するようにしてください。これは、ユーザー x アイテム マトリックスの行番号と列番号を意味します。アイテム ID の場合は 0 からアイテム数マイナス 1、ユーザー ID の場合は 0 からユーザー数マイナス 1 にする必要があります。それ以外のものを使用すると、誤った結果が生じます。この制限は、任意の一意の文字列を使用できるいくつかの Mahout 1.0 Spark ジョブで削除されました。ただし、Hadoop の mapreduce コードはこれらの ID を想定しています。

于 2014-09-05T14:34:55.133 に答える