【问题标题】:Which open-source recommendation system should I choose to deal with big dataset我应该选择哪个开源推荐系统来处理大数据集
【发布时间】:2014-06-24 09:57:44
【问题描述】:

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

每个用户的物品数量确实很大,但用户数量很少,比如几千或一万。

我在google上搜索,发现有一些基于hadoop的开源推荐引擎,比如Mahout,我猜它可能有能力处理这么大的数据,但我不是当然。

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

还是我错了?有人能给我一些建议吗?

【问题讨论】:

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

标签: hadoop recommendation-engine


【解决方案1】:

你的问题标题是:

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

在第一行你说

我想建立一个推荐系统,目标是处理非常大的数据集,> 像 1 TB 数据。

您正在寻求建议作为答案。

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

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

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

我建议您更多地研究算法方面,因为这将决定您可以使用哪种工具,或者您是否需要推出自己的工具。从这里开始阅读http://www.ibm.com/developerworks/library/os-recommender1/,简要了解推荐系统使用的不同方法。总之,不同的方法是:

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

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

  1. 邻域协同过滤非常易于理解,并且相对易于实施。
  2. 使用此方法,您还可以以基本的方式向用户证明您的建议是合理的
  3. 不需要建立模型进行训练,邻居的处理可以“离线”完成,为最终用户提供快速推荐。
  4. 存储邻居实际上非常节省内存,这意味着更好的可扩展性。听起来你需要很多东西。

我的建议中基于用户的部分是因为听起来你的用户比你的项目少。在基于用户的最近邻域中,用户 U 的新项目 I 的预测评分是通过查看其他用户也对项目 I 进行评分并且与用户 U 最相似来计算的。因为您的用户比系统中的项目少与基于项目的协同过滤相比,计算基于用户的协同过滤会更快。

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

因此,实际上,与其寻找能够处理您的数据集的开源软件,不如先考虑您的算法选择,然后寻找具有该算法实现的工具,然后评估它是否可以处理您的数据集中涉及的卷。

综上所述,如果您确实选择采用基于用户的协同过滤路线,那么我相信 Apache Mahout 将能够解决您的问题,如果不是,它肯定会帮助您了解所涉及的复杂性在构建你自己的(只要看看他们的源代码)。

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

这是一个需要思考的大领域,可能没有一个单一的工具可以帮助您解决所有问题,因此请准备好进行大量阅读和研究以及实施大量不同的开放式源工具来帮助你。

说到这里,开始看看 Apache Mahout。回到我说你应该考虑的三个领域的细分。

  1. 它具有商业友好的开源许可证,
  2. 它可以很好地实现您可能需要使用的算法,并且
  3. 它可以在分布式环境中工作(读取可扩展)。

希望对您有所帮助,祝您好运。

【讨论】:

    猜你喜欢
    • 2012-05-28
    • 2013-02-28
    • 2013-08-16
    • 2012-09-10
    • 2011-03-18
    • 1970-01-01
    • 2021-08-28
    • 2014-04-17
    • 1970-01-01
    相关资源
    最近更新 更多