Mahout:如何为新用户提供建议

时间:2012-10-12 11:04:19

标签: mahout svd

我们计划将Mahout用于电影推荐系统。我们也计划 使用SVD进行模型构建。

当有新用户来时,我们会要求他/她为一定数量的电影评分(比如10)。

问题在于,为了向这个新用户提出建议,我们必须再次重建整个模型。

有更好的方法吗?

由于

1 个答案:

答案 0 :(得分:9)

是的......虽然不在Mahout。这些实现本质上是围绕定期重新加载和重建数据模型而构建的。在某些实现中,这仍然允许您即时使用新数据,如基于邻域的实现。我不认为基于SVD的内存中的人会这样做(我没有写它。)

理论上,您可以通过折叠将目标项目/电影投影回用户功能空间,从第一次点击或评级开始提出建议。为了大大简化 - 如果输入A的rank-k近似因子分解为Ak = Uk * Sk * Vk',那么对于新用户u,您需要一个新行Uk_u用于更新。你有A_u。

Uk = Ak *(Vk')^ - 1 *(Sk)^ - 1。好消息是右边的那两个倒是微不足道的。 (Vk')^ - 1 = Vk因为它具有正交列。 (Sk)^ - 1只是取Sk的对角元素的倒数。

所以Uk_u = Ak_u *(Vk')^ - 1 *(Sk)^ - 1。你没有Ak_u,但是你的A_u大致相同,所以你使用它。

如果您喜欢Mahout,并且喜欢矩阵分解,我建议您考虑使用ALS算法。这是一个更简单的过程,所以速度更快(但让折叠变得更加困难 - 看到a recent explanation I gave的结尾)。它很适合推荐。

这也存在于Mahout中,虽然没有实现折叠。 Myrrix,这是我继续从Mahout工作的地方,实现了所有这些。