我写了一个火花程序来提出建议。然后我使用了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)。 无论我选择哪个用户来获取建议,我总是会得到相同的行为(推荐的第一个项目是用户已经评价过的)。
我发现它很奇怪!在任何地方都有问题吗?