我正在实施一个包含真实用户数据的电影推荐系统。我计划采用协同过滤方法。然而,这种方法通常涉及存储用户评级电影的巨大矩阵。由于我有超过一万部电影和十万用户。我不可能创建如此庞大的稀疏矩阵。我想知道每个人如何用如此大量的数据实现协同过滤?谢谢!
答案 0 :(得分:3)
我会向您推荐分布式计算框架,但我认为仍然可以在一台计算机上轻松处理它。
Apache Mahout包含Taste协作过滤库,该库旨在在一台计算机上进行扩展。一个模型 - 什么,10M数据点? - 应该适合具有健康堆大小的内存。查看GenericItemBasedRecommender
和FileDataModel
等内容。
(Mahout还分发了基于Hadoop的实现,但我认为你还不需要它。)
我是作者,但后来又将大型推荐商商业化为Myrrix。它还包含一个独立的单机版本,它是免费的open source。它还可以在一台机器上轻松处理这么多数据。例如,这是一个比this example中使用的数据集更小的数据集。 Myrrix还有一个分布式实现。
除了上述内容之外,还有其他快速分布式实现,例如GraphLab。其他非分布式框架也可能足够快,如MyMediaLite。
我建议只使用其中一种,或者如果你真的只是想知道"怎么"它发生了,检查源代码并查看数据表示。
答案 1 :(得分:0)
我没有使用矩阵形式来存储我的数据。相反,我使用C ++并构建一些像User,Rating,Item这样的结构,它包含我需要的变量和数组。这可能会增加算法的复杂性,但可以有效地节省内存。