0

MapReduce でコサイン類似度を使用してアイテムベースのレコメンデーションを作成しようとしています。

入力セットはこちら。

itemIdx_1、userIdx_1
itemIdx_1、userIdx_2
itemIdx_2、userIdx_1
itemIdx_3、userIdx_3
...

この入力データを使用して設計するにはどうすればよいですか?

コサイン類似度を使用するには、入力は次のようにする必要があると思います。

(設定がないため、データは 0 または 1 であると想定されます)
    itemIdx_1、[userIdx_1:1、userIdx_2:1、userIdx_3:0]
    itemIdx_2、[userIdx_1:0、userIdx_2:1、userIdx_3:0]
    ItemIdx_3、[userIdx_1:0、userIdx_2:0、userIdx_3:1]
    ...

しかし、MapReduce を使用して各行を比較するにはどうすればよいでしょうか?

助けてください。私はこれに1週間ほどうんざりしています..

4

1 に答える 1

0

item1 はアイテムを意味し、ベクトル [user1,user2,user3... userN] を使用してそれを識別できます。item1 と item2 の余弦類似度は

sum(item1*item2)/ sqrt(sum(item1*item1))* sqrt(sum(item2*item2)) 

この sqrt(sum(item1*item1)) を item1 行に追加できます。Dとしてアイテム行に追加します。
注:ベクターアイテムはまばらです。

これを行うには、次の 3 つの手順を使用します。

  1. sqrt(sum(item*item))各アイテムの を計算します。
  2. ユーザー ID でマップします。このようにして、各ユーザーの選択を取得します (同じ選択が同じ reduce 関数にあります)。例えば

    userid    itemid     rating  (D) 
    223  2344 4
    223  2324 5
    223  3444 3
    

    次に、ユーザーごとに 2 つの項目を結合します。次に、2 つの項目ごとにユーザーのリストを取得します。例えば

    itemid1 itemid2  rating1 rating2 (D1) (D2)  
    2344  2324 4 5  
    ........
    
  3. (非常に簡単) itemid1 と itemid2 の評価を計算します。を使用sum(item1*item2)し、 と を知っているsqrt(sum(item1*item1))のでsqrt(sum(item2*item2))、コサイン類似度を取得します。

于 2015-06-19T01:17:30.977 に答える