在Mahout中实现SVD推荐器

我有一个包含5000万用户偏好的数据集,其中包含800万个不同的用户和180K个不同的产品.我目前正在使用布尔数据模型,并且具有基本的基于tanimoto相似性的推荐器.

我正在尝试探索不同的算法以获得更好的建议,并开始使用带有ALSWR因子分解器的SVD.我使用mahout中提供的基本SVD推荐器如下.

DataModel dataModel = new FileDataModel(“/ FilePath”);

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

推荐者=新的SVDRecommender(dataModel,factorizer);

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

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

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

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

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

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

点赞