我正在使用真实的用户数据实现一个电影推荐系统。我打算采用协同过滤的方法。然而,这种方法通常需要一个巨大的矩阵来存储用户的评分电影。因为我有超过一万部电影和十万用户。我不可能创建这么大的稀疏矩阵。我想知道每个人是如何在如此大量的数据中实现协同过滤的?谢谢!
发布于 2013-03-13 18:16:41
我会向你推荐分布式计算框架,但我认为你仍然可以在一台机器上轻松地处理它的规模。
Apache Mahout包含品味协同过滤库,该库设计用于在一台机器上进行扩展。一个模型-- 10M个数据点?--应该以健康的堆大小放在内存中。看看像GenericItemBasedRecommender和FileDataModel这样的东西。
(Mahout也有基于Hadoop的分布式实现,但我认为您还不需要它。)
我是这篇文章的作者,但后来我开始将大规模的推荐器商业化为Myrrix。它还包含一个独立的单机版本,这是免费的和open source。它还可以很容易地在一台机器上处理这些数据量。例如,这是一个比this example中使用的数据集更小的数据集。Myrrix也有一个分布式实现。
除此之外,还有其他快速分布式实现,如GraphLab。其他非分布式框架可能也足够快,比如MyMediaLite。
我建议只使用其中之一,或者如果您真的只是想知道它是如何发生的,请查看源代码并查看数据表示。
发布于 2013-05-30 03:36:41
我没有使用矩阵形式来存储我的数据。相反,我使用C++并构建了一些结构,如User、Rating、Item,它们包含我需要的变量和数组。这可能会增加算法的复杂度,但可以有效地节省内存。
https://stackoverflow.com/questions/15365956
复制相似问题