0

我有以下代码:

ItemSimilarity itemSimilarity = new UncenteredCosineSimilarity(dataModel); 
recommender = new GenericItemBasedRecommender(dataModel,itemSimilarity);
List<RecommendedItem> items = recommender.mostSimilarItems(10, 5);

我的数据模型是这样的:uid itemid socre

userid itemid score
  1    6    5
  1   10    3
  1   11    5
  1   12    4
  1   13    5
  2   2     3
  2   6     5
  2   10    3
  2   12    5

当我运行上面的代码时,结果是这样的: 13 6 11 2 12 我调试代码,发现List items = Recommendationer.mostSimilarItems(10, 5); 返回的物品得分相同,即为一!所以,我有一个问题。在我看来,我认为最相似的item应该考虑item co-occurrence matrix:</p>

    2   6   10  11  12  13

2   0   1   1   0   1   0

6   1   0   2   1   2   1

10  1   2   0   1   2   1

11  0   1   1   0   1   1

12  1   2   2   1   0   1

13  0   1   1   1   1   0

在上面的矩阵中,第 12 项最相似的应该是 [6,12,11,13,2],因为第 1 项和第 12 项比其他项更相似,不是吗?现在,谁能为我解释一下?谢谢!

4

2 回答 2

0

在您的矩阵中,您的数据比输入中的数据多得多。特别是您似乎在输入数据中没有的 0 值。这就是为什么您可能会得到与您预期不同的答案。

于 2014-05-23T07:14:52.663 回答
0

Mahout 希望您的 ID 是从 0 开始的连续整数。您的行 ID 和列 ID 也是如此。您的矩阵看起来缺少 id。仅拥有整数是不够的。

这可能是问题吗?不确定 Mahout 会对上面的输入做什么。

我总是保留一本字典来将 Mahout ID 映射到我自己的 ID。

于 2014-05-26T14:51:11.037 回答