6

我目前正在研究生成产品推荐的系统,例如亚马逊上的产品推荐:“买这个的人也买了这个..”

当前场景:

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

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

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

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

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

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

  • PHP 与 SimpleDB 或 BIGQuery。

  • 带有 BIGQuery 的 R 语言。

  • RHIPE-(R 和 hadoop)与 SimpleDB。

  • Apache Mahout。

请帮忙!

4

2 回答 2

2

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

不过,可以考虑以下几点:

  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 接口(见下面的评论),但我怀疑通过 HTTP 或 TCP/IP 访问 R 会更好。

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

于 2011-08-19T23:10:18.857 回答
1

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

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

于 2011-08-20T06:16:31.750 回答