2014-06-24 114 views
1

我想建立一个推荐系统,目标是应对真正的大数据集,像1点TB的数据。哪个开源推荐系统,我应该选择来处理大数据集

而且每个用户拥有项目的真正数额巨大,但用户数量较少,比如几千或10万。

我有谷歌搜索,我发现有一些基于hadoop的开源推荐引擎,如Mahout,我想它可能有处理这些大数据的能力,但是我不确定。

我还发现在C++中的Python,PHP甚至一些发动机写的,我不认为脚本语言能够处理这么大的数据,导致内存不能包含整个数据集。

或者我错了?有人能给我一些建议吗?

+0

是的,Mahout将是您的正确选择。通过Mahout协作过滤,您可以在分布式系统上构建可扩展的推荐系统,以处理非常大的数据集。 –

回答

2

你的问题的标题是:

哪个开源系统的建议我应该选择处理 大数据集?

,并在第一行,你说

我想建立一个推荐系统,目标是应对真正的大数据集,>像1点TB的数据。

而且你所要求的一个建议,作为一个答案。

先回答你的第二个问题。根据我建立推荐系统的经验,我建议你不要从头开始“建立”推荐系统,如果可以避免的话。推荐系统非常复杂,可以使用各种技术为用户提供建议。所以我的建议是,除非你真的承诺,并且拥有一批在推荐系统,统计和软件工程方面具有丰富经验和知识的人员,然后寻求实施现有的推荐系统,而不是建立自己的推荐系统。

在其开放源码的推荐系统,你应该选择而言,这实际上是相当困难的非常精确地回答。让我试着通过分解来回答这个问题。

  1. 考虑开源许可证,其限制和您的要求。
  2. 考虑您想使用哪种算法来提出建议
  3. 考虑您将运行推荐系统的环境。

我建议你看看更多到算法一侧,这将是哪个工具,您可以使用,或是否需要推出自己的决定因素。从这里开始阅读http://www.ibm.com/developerworks/library/os-recommender1/,以便深入了解推荐系统使用的不同方法。总之,不同的方法:

  • 基于内容的
  • 邻居/协同过滤基于
  • 基于约束的
  • 基于图形

你的情况,让事情变得相对简单听起来就像你应该考虑一个用户用户协同过滤算法一样。一个原因是:

  1. 邻居协同过滤是非常直观明了,它可以是相对容易实现。
  2. 使用此方法,您还可以基本方式向用户证明您的建议
  3. 没有要求为培训建立模型,并且可以“离线”完成邻居的处理,以提供快速建议最终用户。
  4. 存储邻居实际上内存效率很高,这意味着更好的可伸缩性。听起来你会需要很多东西。

我的建议的基于用户的部分是因为它听起来像你有用户少于你的项目。在基于用户的最近邻域中,用户U的新项目I的预测评级通过查看也评估了项目I并且与用户U最相似的其他用户来计算。因为您的用户比系统中的项目少与基于物品的协作过滤相比,计算基于用户的协作过滤的速度会更快。

在基于用户的协作过滤中,您需要考虑要使用的评分归一化(平均中心vs z分数),相似性权重计算方法(例如余弦vs Pearsons相关性vs其他相似性度量)使用邻居选择标准(邻居的预过滤,参与预测的邻居数量)以及要实施的任何维度降低方法(SVD,SVD ++)(对于像您这样的大型数据集,您需要认真考虑DM )。

所以真的不是寻找一个能够处理数据集的开源代码,而应该首先考虑您的算法选择,然后寻找一个具有此算法实现的工具,然后评估它是否可以处理您的数据集中涉及的数量。

这么说吧,如果你确实选择了基于用户的协作过滤路线,那么我相信Apache Mahout将能够解决你的问题,如果没有,它肯定会帮助你理解复杂性参与构建你自己的(只看他们的源代码)。

请注意,建议是真的考虑算法的选择。 “好”推荐系统不仅仅是能够处理大型数据集。您需要考虑准确性,覆盖范围,信心,新颖性,偶然性,多样性,健壮性,隐私性,风险用户信任以及可扩展性。您还应该考虑您将如何执行实验并评估您的建议,请记住,如果您所推荐的建议是垃圾内容,并且会关闭用户,那么推荐系统就没有意义了!

这是一个非常大的领域,需要思考的很多,可能没有一个单一的工具可以帮助你完成所有的事情,所以要做好大量的阅读和研究工作,以及实施很多不同的开源工具来帮助你。

在说,开始看Apache的Mahout。回到我说你应该考虑的3个领域的分解。

  1. 它有一个商业友好的开源许可证,
  2. 它有真正伟大的实现,你很可能会需要使用的算法,并
  3. 它可以在分布式环境中工作(读可扩展)。

希望有帮助,祝你好运。