我应该选择哪种开源推荐系统来处理大数据集

时间:2014-06-24 09:57:44

标签: hadoop recommendation-engine

我想建立一个推荐系统,目标是处理真正的大数据集,如1 TB数据。

每个用户都有大量的项目,但用户数量很少,如数千或数万。

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

我也发现一些引擎用C ++ python编写,即使是php,我也不认为脚本语言可以处理这么大的数据,因为内存不能包含整个数据集。

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

1 个答案:

答案 0 :(得分:2)

您的问题标题是:

  

我应该选择哪个开源推荐系统来处理   大数据集?

并在第一行说出

  

我想建立一个推荐系统,目标是处理真正的大数据集,>比如1 TB数据。

您要求提供建议作为答案。

首先回答你的第二个问题。根据我构建推荐系统的经验,我建议你不要建立"构建"如果你可以避免它,从头开始推荐系统。推荐系统很复杂,可以使用多种技术为用户提供建议。所以我的建议是,除非你真的致力于此,并且拥有一支在推荐系统,统计和软件工程方面拥有丰富经验和知识的团队,然后寻求实施现有的推荐系统,而不是建立自己的推荐系统。

就您应该选择哪种开源推荐系统而言,这实际上非常难以准确回答。让我试着通过分解来解决这个问题。

  1. 考虑开源许可证,其限制和您的要求。
  2. 考虑使用哪种算法来提出建议
  3. 考虑一下您将运行推荐系统的环境。
  4. 我建议你更多地考虑算法方面,因为它将决定你可以使用哪种工具,或者你是否需要自己动手。从这里开始阅读http://www.ibm.com/developerworks/library/os-recommender1/,了解推荐系统使用的不同方法。总之,不同的方法是:

    • 基于内容
    • 基于邻居/协作过滤的
    • 基于约束
    • 基于图表

    在你的情况下,为了使事情相对简单,听起来你应该考虑用户 - 用户协作过滤算法。原因是:

    1. 邻域协作过滤非常直观易懂,而且相对易于实现。
    2. 使用此方法,您还可以基本方式向用户提出建议
    3. 不需要为培训建立模型,并且可以完成对邻居的处理,以及向最终用户提供快速推荐。
    4. 存储邻居实际上是非常高效的内存,这意味着更好的可扩展性。听起来你需要很多东西。
    5. 我建议的基于用户的部分是因为听起来你的用户少于你做的项目。在基于用户的最近邻域中,通过查看也评价了项目I并且与用户U最相似的其他用户来计算用户U的新项目I的预测评级。因为您的用户少于系统中的项目与基于项目的协同过滤相比,计算基于用户的协同过滤会更快。

      在基于用户的协同过滤中,您需要考虑要使用的评级标准化(平均中心与z分数),相似权重计算方法(例如余弦与皮尔逊相关与其他相似性度量)您想要使用,邻域选择标准(邻居的预过滤,预测中涉及的邻居数量),以及您想要实现的任何维度降低方法(SVD,SVD ++)(使用像您这样的大型数据集,您将需要认真考虑DM)

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

      在说所有这些内容时,如果您确实选择了基于用户的协作过滤路线,那么我相信Apache Mahout将能够解决您的问题,如果不能,它肯定会帮助您了解所涉及的复杂性建立自己的(只需看看他们的源代码)。

      请注意建议真的考虑算法选择。 "良好的"推荐系统不仅仅是能够处理大型数据集。您需要考虑准确性,覆盖范围,信心,新颖性,偶然性,多样性,稳健性,隐私性,风险用户信任以及最终的可扩展性。您还应该考虑如何进行实验并评估您的建议,记住您正在制作的建议是垃圾还是关闭用户,那么没有必要建立推荐系统!

      这是一个有很多值得思考的大区域,可能没有任何一个工具可以帮助你解决所有事情,所以要做好准备做大量的阅读和研究以及实施许多不同的开放源工具,以帮助您。

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

      1. 它有一个商业友好的开源许可证,
      2. 它可能非常适合您可能需要使用的算法,
      3. 它可以在分布式环境中工作(读取可扩展)。
      4. 希望有所帮助,祝你好运。