0

我正在尝试使用 mahout 创建项目相似性。问题是我在输出方面确实很少有相似之处。

这是我的输入数据特征:

  • 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
4

3 回答 3

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 口味实现接受整数作为 user_ids 的输入。如果您提供任何超出 MAX.int 值的内容,它将翻转到最小值,这意味着它不会被添加为唯一用户。

如果您的 user_id 超过 MAX.int 值,您可能可以在将其提供给 Mahout 之前对其进行散列。或者您可以有一个字母数字 id,然后使用 ID-Migrator 类作为 user_id 输入。

于 2014-08-06T23:34:59.077 回答
0

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

ID 就像矩阵或表中的行号和列号 0,0 是用户 0 项目 0,值是评级。

在读取 itemsimilarity 的结果时,您必须将您的 ID 转换为 Mahout ID,然后再转换回您的 ID。

于 2014-07-26T01:13:41.437 回答
0
  • 我应该使用COSINE_SIMILARTY而不是SIMILARITY_PEARSON_CORRELATION因为我使用离散偏好
    • 不要使用阈值,它不像参数那样工作booleanData=true
    • 我不确定我是否必须“重新映射”我的自然用户,项目 ID 以替代 [0...N]。

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

于 2014-08-07T08:14:06.653 回答