Spark MLLib Collaborative Filtering与新用户

时间:2015-03-20 05:34:02

标签: apache-spark apache-spark-mllib collaborative-filtering

我正在尝试在Spark中实现的Collaborative Filtering算法,并且遇到了以下问题:

假设我使用以下数据训练模型:

u1|p1|3
u1|p2|3
u2|p1|2
u2|p2|3

现在,如果我使用以下数据进行测试:

u1|p1|1
u3|p1|2
u3|p2|3

我从未看到用户'u3'的任何评级,可能是因为该用户没有出现在训练数据中。这是因为冷启动问题吗?我的印象是这个问题只适用于新产品。在这种情况下,我预计会对'u3'进行预测,因为训练数据中的'u1'和'u2'具有与'u3'类似的评级信息。这是基于模型和基于内存的协同过滤之间的区别吗?

1 个答案:

答案 0 :(得分:2)

我假设你在谈论ALS算法?

'u3'不是您的训练集对,因此您的模型对该用户一无所知。所有人都可以返回所有用户的平均评分。

查看Spark 1.3.0 Scala代码:MatrixFactorizationModel返回的ALS.train()尝试在调用predict()时在功能向量中查找用户和产品。当我尝试预测未知用户的评分时,我得到NoSuchElementException。它就是这样实现的。