Spark MLLib Collaborative Filtering与新用户

Nav*_*ath 5 collaborative-filtering apache-spark apache-spark-mllib

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

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

u1|p1|3
u1|p2|3
u2|p1|2
u2|p2|3
Run Code Online (Sandbox Code Playgroud)

现在如果我用以下数据测试它:

u1|p1|1
u3|p1|2
u3|p2|3
Run Code Online (Sandbox Code Playgroud)

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

sth*_*lzm 2

我猜你说的是 ALS 算法?

“u3”不是您的训练集对,因此您的模型对该用户一无所知。我们所能做的就是返回所有用户的平均评分。

查看 Spark 1.3.0 Scala 代码:当您调用 时MatrixFactorizationModel,返回的ALS.train()尝试在特征向量中查找用户和产品predict()。NoSuchElementException当我尝试预测未知用户的评分时,我得到了。它只是以这种方式实现的。