无法通过首选项获取mahout项目相似度结果(booleanValue = false)

时间:2014-07-25 08:33:31

标签: mahout collaborative-filtering mahout-recommender

我尝试使用mahout创建get itemismilarity。问题是我在输出方面几乎没有相似之处。

以下是我的输入数据特征:

  • 15.910.847首选项总数
  • 4.047.745不同用户
  • 773.015个不同的项目 我已经构建了用户和优先分配

第一列是不同用户的数量

第二列是每个用户的偏好计数。例如,我有2.221.760使用只有一个首选项。

2221760   1
688258    2
322497    3
192003    4
122446    5
87033 6
63733 7
49556 8
39090 9
31637 10
25634 11

以下是我的输入设置:

similarityClassname=SIMILARITY_PEARSON_CORRELATION
maxSimilaritiesPerItem=100000
minPrefsPerUser=0

booleanData=false
threshold=0.75

3 个答案:

答案 0 :(得分:0)

第1列应为Mahout用户ID,从0到用户数 - 1 第2列应该是Mahout项目ID,从0到项目数量 - 1您不能只计算您想要记录用户显示某些偏好的项目的首选项 第3列是偏好的强度,如评级

ID类似于矩阵或表格中的行号和列号0,0是用户0项目0,该值是评级。

在阅读项目相似度的结果时,您必须将您的ID转换为Mahout ID,然后再将其转换回您的ID。

答案 1 :(得分:0)

  

没有帮助。我使用了apache pig Rank函数为每个不同的user_id提供1..N id,为每个不同的item_id提供1..M。我确实用数据集提供了ItemSimilarityJob,其中user_id在[1..N],item_id [1..M],首选项:1.0或2.0,输出结果与4 * 10 ^ 6个用户的16 * 10 ^ 6个偏好相同对于7 * 10 ^ 5项目,10个项目只有10 ^ 3个相似性...我做错了什么?输入数据集是否应按项目/用户ID排序? - 谢尔盖7月27日20:46

这是因为Mahout品味实现接受int作为user_ids的输入。如果您提供溢出MAX.int值的任何内容,它将翻转到最小值,这意味着它不会作为唯一用户添加。

如果你的user_id超过MAX.int值,你可以将其输入Mahout。或者您可以使用字母数字ID,然后使用ID-Migrator类进行user_id输入。

答案 2 :(得分:0)

  • 我应该使用COSINE_SIMILARTY代替SIMILARITY_PEARSON_CORRELATION,因为我使用离散偏好
    • 不要使用阈值,它与param booleanData=true
    • 不同
    • 我不确定我是否需要"重新映射"我的自然用户,项目ID代理[0 ... N]。

问题看起来像解决了。谢谢你们!