在Mahout中实现SVD推荐器

时间:2013-12-17 10:43:30

标签: mahout recommendation-engine mahout-recommender

我有一个包含5千万不同用户和180K不同产品的5000万用户偏好数据集。我目前正在使用布尔数据模型,并且具有基本的基于tanimoto相似性的推荐器。 我正在尝试探索不同的算法以获得更好的建议,并开始使用带有ALSWR因子分解器的SVD。我使用mahout中提供的基本SVD推荐器如下。

DataModel dataModel = new FileDataModel("/FilePath");

ALSWRFactorizer factorizer = new ALSWRFactorizer(dataModel, 50, 0.065, 15);

recommender = new SVDRecommender(dataModel, factorizer);

根据我的基本理解,我相信分解是在线下进行的,它会创建用户功能和项目功能。虽然通过采用用户向量和所有可能的项目向量的点积来计算用户的顶级产品来提供实际请求。

我对这种方法有一些疑问: -

  1. 选择分解参数的最佳方法是什么,以及如何选择 分解通常花费多少时间?我尝试使用上述参数,因子分解本身运行了30多分钟。
  2. 有没有一种方法可以更快地提供实时请求,就像使用点积一样 所有可能的项目向量导致高请求时间? 是否有离线SVD的东西?
  3. 看看我拥有的数据集的大小,我应该尝试一些其他的因子分析器吗?

1 个答案:

答案 0 :(得分:2)

我想一起回答你的所有问题。

鉴于您的数据大小和实时请求,您应该采取另一种方法。

  1. 执行离线项目 - 项目相似度计算,对于具有大量评级的项目,通常不需要这样做。他们大多不会改变。您可能想要重新计算评分很少的项目。
  2. 使用项目项目相似性列表实时计算每个用户的用户项目评级预测。由于您的项目数量少于用户,因此此操作的成本并不高。当项目大小没有那么大变化时,它也是一个恒定的时间操作。