【问题标题】:Recommendations using R with SimpleDB or BigQuery or using PHP with SimpleDB将 R 与 SimpleDB 或 BigQuery 结合使用或将 PHP 与 SimpleDB 结合使用的建议
【发布时间】:2011-10-30 14:23:54
【问题描述】:

我目前正在研究生成产品推荐的系统,例如 Amazon 上的产品推荐:“购买此产品的人也购买了此产品..”

当前情景:

  • 提取客户端的谷歌分析数据并插入数据库中。

  • 在客户端的网站上,在加载产品页面时,会进行 API 调用以获取正在查看的产品的推荐。

  • 当 API 收到产品 ID 作为请求时,它会在数据库中查找并检索(使用关联规则)推荐的产品 ID 并将它们作为响应发送。

  • 这些产品ID的列表将被处理以在客户端获取产品详细信息(图像,价格..)并显示在网站上。

  • 目前我正在使用 PHP 和 MYSQL 以及 gapi 包和 REST api 存储在 AMAZON EC2 上。

我的问题是: 现在,如果我必须在以下选项中进行选择,那将是实现上述概念的最佳选择。

  • PHP 与 SimpleDB 或 BIGQuery。

  • 带有 BIGQuery 的 R 语言。

  • 使用 SimpleDB 的 RHIPE-(R 和 hadoop)。

  • Apache Mahout。

请帮忙!

【问题讨论】:

    标签: r hadoop amazon-simpledb mahout google-bigquery


    【解决方案1】:

    这不是那么容易回答,因为约束是相当专业的。

    但可以考虑以下几点:

    1. BIGQuery 尚未公开。因此,由于使用基数较小,即使您处于预览阶段,也很难获得改进建议。
    2. 您的每个答案都询问了建模系统和存储系统。 Apache Mahout 不是一种存储机制,因此它不一定会单独工作。我曾经认为它的机器学习实现是一些 Google Summer of Code 的仿制品,但我已经根据评论者的建议更新了这一观点。看起来它对不同算法的覆盖仍然相当不均匀和参差不齐,而且还不清楚如何支持或维护这些组件。我鼓励 Mahout 的传道者解决这个问题。

    因此,这消除了第 1、第 2 和第 4 个选项。

    我不太明白需要实时服务器来利用 Hadoop 和 RHIPE。这应该在开发推荐模型的批处理中完成,而不是实时完成。我想你可以使用 RHIPE 作为一个简单的一站式前端来触发查询。

    我建议使用 RApache 而不是 RHIPE,因为您可以预先加载您的包和模型。我认为在前端使用 Hadoop 没有任何优势,但对于模型拟合来说,它将是一个非常自然的后端系统。

    (更新 1)其他界面选项包括 RServe (http://www.rforge.net/Rserve/) 和可能的服务器模式下的 RStudio。有 R/PHP 接口(见下面的 cmets),但我怀疑通过 HTTP 或 TCP/IP 访问 R 会更好。

    (更新 2)解决整个过程,我看到的基本思想是您可以从 PHP 查询数据并传递给 R,或者,如果您希望从 R 中查询,请查看 cmets 中的链接(到OmegaHat 工具)或发布一个关于 R & SimpleDB 的新问题——我相信 SO 上的其他人能够更好地了解这个特定的连接。 RApache 将允许您实例化许多已经准备好加载包和 RAM 中的数据的 R 进程;因此,您只需要传递需要用于预测的任何数据。如果您的新数据是一个小向量,那么 RApache 应该没问题,而且对于正在实时处理的数据来说,这似乎是正确的。

    【讨论】:

    • 我不明白为什么您认为 Mahout 是一堆 GSoC 项目,也不知为何还没有准备好使用。算上我自己写的代码,我可以告诉你我维护它,改进它,自 2005 年以来一直在做,并且知道它在生产中被“愤怒”地使用。抱歉,您可能有一些不好的印象,但这是完全错误的。
    • 我有两个过程,1>从存储在 mysql 中的原始数据生成推荐 2>处理数据后(即应用聚类和推荐算法)将数据存储在数据库中(SimpleDB 或 Bigquery) .该数据库将通过api请求查询。现在,1>将批量处理,2>需要实时响应。现在,根据Seans的回复,似乎1>我可以使用Mahout,但2>我还在不清楚数据库与 mahout 的正确组合。但根据你的说法,mahout 还没有准备好用于工业用途。请帮我选择正确的组合。
    • @Sean:我没有不尊重的意思 - 开发好的建模库需要花费大量时间,而在 Mahout 上工作无疑是一项热爱劳动。尽管如此,解决 OP 的问题,它仍然是一个小项目,只有几个算法,而且算法类的覆盖范围相当参差不齐。我意识到我对 GSoC 的看法可能是错误的 - 过去,看起来 Mahout 的大部分报道都来自一次性项目。
    • (续)我意识到有成人监督,很高兴您和其他人指导学生向他们传授 ML 和可扩展性,以及您自己对代码库的贡献。鉴于此,我将更新我的答案。
    • @Sean,我已经更新了我的答案。如果我关于尚未准备好用于生产的评论似乎具有侮辱性,我深表歉意。我开始意识到我对生产中使用的东西有相当高的标准。 Mahout 并不是唯一一个没有晋级的人。这并不是说其他​​人可能不会使用 Mahout。我见过很多人做我不会做的事情。
    【解决方案2】:

    如果您想要基于数据库中的数据进行推荐的实时 API,Apache Mahout 可以直接执行此操作。您想使用ReloadFromJDBCDataModel,在上面放置一个GenericItemBasedRecommender,并在examples 模块中使用基于servlet 的包装器。熟悉代码并根据需要对其进行自定义可能需要一两天的时间,但这非常简单。

    当您超过大约 1 亿个数据点时,您需要考虑分布式计算 Hadoop。这要复杂一些。 Mahout 也有一个分布式推荐器,您可以自定义它。

    【讨论】:

    • 嘿,谢谢您的回复。现在根据您的建议和我的需要,我需要数据处理(R 或 mahout)和数据存储(simpeldb 或 bigquery)的组合。使用 mahout 好不好使用 SimpleDB?另外,hadoop 将如何帮助我?
    • Mahout 中没有任何东西直接使用 SimpleDB。如果你想使用访问速度相对较慢的远程数据存储,请参阅我关于与 Cassandra 集成的文章;您也许可以重用该方法 (acunu.com/blogs/sean-owen/recommending-cassandra)。 Hadoop 用于分发计算以并行化和扩展它。除非你需要,否则不要使用它。如果您的行数少于数千万,则不需要它。
    • 嘿,浏览了你的文章,你让理解这个概念变得非常简单。现在,如果我错了,请纠正我,Cassandra 的作用是保存数据,这些数据又作为 Mahout 的输入,但这就是我的情况......
    • (续...) 我有两个过程,第 1 步>从存储在 MySQL 中的原始数据生成推荐 第 2 步>处理数据后(即应用聚类和推荐算法使用Mahout)将生成的建议存储在数据库中,这次存储在 SimpleDB 中,因为将通过 api 请求查询该数据库以返回建议(我在问题中提到了 API 的详细信息)。现在,步骤 1> 将被批量处理,因此使用 MySQL 和 step-2> 需要实时响应,因此使用 SimpleDB。现在 Cassandra 应该替换 SimpleDB 了吗?
    • Hey Sean,如果能对以下架构发表评论,将会很有帮助:1> MySQL 存储原始数据 2> 使用 mahout 处理数据 3> 将输出存储在 SimpleDB 中(如果可能)或卡桑德拉。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    • 2019-02-24
    • 2021-10-05
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    相关资源
    最近更新 更多