我编写了一个Spark程序来进行推荐。然后我使用了ALS.recommendation库。我用一个名为trainData的数据集进行了小型测试:
(u1, m1, 1)
(u1, m4, 1)
(u2, m2, 1)
(u2, m3, 1)
(u3, m1, 1)
(u3, m3, 1)
(u3, m4, 1)
(u4, m3, 1)
(u4, m4, 1)
(u5, m2, 1)
(u5, m4, 1)
第一列包含用户,第二列包含用户评分的物品,第三列包含评分。
在我的scala代码中,我使用以下方式训练了模型:
myModel = ALS.trainImplicit(trainData, 3, 5, 0.01, 1.0)
我尝试使用以下指令检索u1的一些建议:
recommendations = myModel.recommendProducts(idUser, 2)
其中 idUser 包含分配给用户u1的 ID。 根据我的建议,我得到:
(u1, m1, 1.0536233346170754)
(u1, m4, 0.8540954252858661)
(u1, m3, 0.09069877419040584)
(u1, m2, -0.1345521479521654)
如您所见,前两行显示推荐的物品是用户u1已经评价过的(m1和m4)。 不论我选择哪个用户来获得推荐,我总是得到相同的结果(首先推荐的是用户已经评价过的物品)。
我觉得这很奇怪!有什么问题吗?