首页 文章

在Mahout中实现SVD推荐器

提问于
浏览
4

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

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

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

recommender = new SVDRecommender(dataModel, factorizer);

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

我对这种方法有几点疑虑: -

  • 选择分解参数的最佳方法是什么?分解通常需要多长时间?我尝试了上述参数,因子分解本身运行了30分钟 .

  • 有没有办法更快地提供实时请求,因为将点积与所有可能的项向量一起使用会导致请求时间过长?有离线SVD的东西吗?

  • 看看我拥有的数据集的大小,我应该尝试一些其他的因子分析器吗?

1 回答

  • 2

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

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

    • 执行离线项目 - 项目相似度计算,对于具有大量评级的项目,通常不需要这样做 . 他们大多不会改变 . 您可能想要重新计算评分较低的项目 .

    • 使用项目项目相似性列表实时计算每个用户的用户项目评级预测 . 由于您的项目数量少于用户,因此此操作的成本并不高 . 它改变了那么多 .

相关问题