3

製品分類に基づいてコンテンツ ベースの類似性をシミュレートするカスタム アイテムの類似性を作成しました。次の 2 つのアイテムだけを気に入っているユーザーがいます。

UserId    ItemId      Preference
7656361   1449133     1.00
7656361   18886199    8.00

私のカスタムitemSimilarityは [-1,1] の値を返します。ここで、1 は強い類似性を意味し、-1 は強い非類似性を意味します。ユーザーが気に入った 2 つのアイテムには、分類ツリー内で最も低い共通の祖先がないため、値が 1 ではありません。ただし、一部のアイテムでは 0、0.20、および 0.25 の値になります。

私は次の方法で推奨事項を作成します。

ItemSimilarity similarity = new CustomItemSimilarity(...); 
Recommender recommender = new GenericItemBasedRecommender(model, similarity);
List<RecommendedItem> recommendations = recommender.recommend(7656361, 10);
for (RecommendedItem recommendation : recommendations) {
    System.out.println(recommendation);
}

私は次の結果を得ています:

RecommendedItem[item:899604, value:4.5]
RecommendedItem[item:1449081, value:4.5]
RecommendedItem[item:1449274, value:4.5]
RecommendedItem[item:1449259, value:4.5]
RecommendedItem[item:715796, value:4.5]
RecommendedItem[item:3255539, value:4.5]
RecommendedItem[item:333440, value:4.5]
RecommendedItem[item:1450204, value:4.5]
RecommendedItem[item:1209464, value:4.5]
RecommendedItem[item:1448829, value:4.5]

一見誰かが言うだろう、それはレコメンデーションを生成します。ペアごとのアイテム間の比較を行うため、 から値を出力しようとしましたitemSimilarityが、次の驚くべき結果が得られました。

ItemID1  ItemID2    Similarity
899604   1449133    -1.0
899604   18886199   -1.0
1449081  1449133    -1.0
1449081  18886199   -1.0
1449274  1449133    -1.0
1449274  18886199   -1.0
1449259  1449133    -1.0
1449259  18886199   -1.0
715796   1449133    -1.0
715796   18886199   -1.0
3255539  1449133    -1.0
3255539  18886199   -1.0
333440   1449133    -1.0
333440   18886199   -1.0
1450204  1449133    -1.0
1450204  18886199   -1.0
1209464  1449133    -1.0
1209464  18886199   -1.0
1448829  1449133    -1.0
1448829  18886199   -1.0
228964   1449133    -1.0
228964   18886199    0.25
57648    1449133    -1.0
57648    18886199    0.0
899573   1449133    -1.0
899573   18886199    0.2
950062   1449133    -1.0
950062   18886199    0.25
5554642  1449133    -1.0
5554642  18886199    0.0
...

そして、さらにいくつかあります。それらは製造オーダーにはありません。要点を言いたかっただけです。-1 の非常に強い非類似性を持つアイテムはすべて推奨され、0.0、0.2、および 0.25 の類似性を持つアイテムはまったく推奨されません。これはどのように可能ですか?itemSimilarityインターフェイスのメソッドにItemSimilarityは、次の説明があります。

このインターフェースの実装は、2 つのアイテム間の類似性の概念を定義します。実装は、-1.0 から 1.0 の範囲の値を返す必要があります。1.0 は完全な類似性を表します。

[0,1] 間の類似性を使用すると、次の推奨事項が得られます。

RecommendedItem[item:228964, value:8.0]
RecommendedItem[item:899573, value:8.0]
RecommendedItem[item:950062, value:8.0]

ペアごとの類似度は次のとおりです (それらのツリーのみ、他のツリーは 0):

228964  1449133   0.0
228964  18886199  0.25
950062  1449133   0.0
950062  18886199  0.25
228964  1449133   0.0
228964  18886199  0.25

EDIT1449133, 18886199 : with:に最もよく似たアイテムも印刷しました(GenericItemBasedRecommender)delegate).mostSimilarItems(new long[]{1449133, 18886199}, 10)[RecommendedItem[item:228964, value:0.125], RecommendedItem[item:950062, value:0.125], RecommendedItem[item:899573, value:0.1]]

アイテム 18886199 のみ、(GenericItemBasedRecommender)delegate).mostSimilarItems(new long[]{18886199}, 10)を入手し[RecommendedItem[item:228964, value:0.25]]ました。似たような商品は1449133ありません。

なぜそれが強い相違点で機能しないのかわかりませんか?もう 1 つの疑問は、予測された選好値がすべて8.0またはである理由4.5です。18886199おすすめ商品と商品だけが類似しているのがわかりますが、 の場合の類似度に 8.0 の値を掛けて、 の代わりに の0.25値を求める方法はありますか?これは、ユーザーがまだわからないため、類似度を計算している間は実行できませんが、推奨段階で実行する必要があると思います。これはレコメンダーがどのように機能するべきか、またはカスタムのレコメンダーを作成してカスタムの方法でジョブを実行する必要があるのではないでしょうか?2.08.0

Mahout コミュニティの誰かが私に指示を与えることができれば、本当に感謝しています。

4

0 に答える 0