我想建立一个推荐系统,目标是处理真正的大数据集,比如1 TB数据。
而且每个用户都有大量的物品,但是用户的数量很小,比如数千或1万。
我从google搜索,我发现有一些基于hadoop的开源推荐引擎,比如Mahout,我想它可能有能力处理这么大的数据,但是我不确定。
我还发现一些引擎编写了C++ python,甚至php,我不认为脚本语言能够处理这么大的数据,因为内存不能包含整个数据集。
还是我错了?有人能给我一些建议吗?
发布于 2014-12-03 22:34:45
你的问题标题是:
我应该选择哪个开源推荐系统来处理大数据集?
在第一行你说
我想建立一个推荐系统,目标是处理真正的大数据集,>像1 TB数据。
你要求一个建议作为一个答案。
先回答你的第二个问题。根据我构建推荐系统的经验,我建议您不要从根本上“构建”推荐系统,如果您可以避免的话。推荐系统很复杂,可以使用广泛的技术为用户提供推荐。因此,我的建议是,除非您真的很投入,并且拥有一组在推荐系统、统计数据和软件工程方面具有广泛经验和知识的人员,否则您将寻求实现现有的推荐系统,而不是构建自己的推荐系统。
对于您应该选择的开放源码推荐系统,这实际上是非常难以准确回答的。让我试着通过分解来回答这个问题。
我建议您更多地研究算法方面,因为它将是决定您可以使用哪个工具的因素,或者您是否需要滚动自己的工具。从这里开始阅读http://www.ibm.com/developerworks/library/os-recommender1/,了解推荐系统使用的不同方法。总之,不同的办法是:
在您的情况下,为了保持相对简单,听起来您应该考虑一种用户-用户协作过滤算法。原因是:
我的建议中基于用户的部分是因为听起来你的用户比你做的项目少。在以用户为基础的最近的邻居中,用户U的新项目I的预测等级是通过查看其他用户,这些用户也对I进行了评级,并且与用户U最相似,因为您的系统中的用户比项目少,因此与基于项的协作过滤相比,计算基于用户的协作过滤要快得多。
在基于用户的协作过滤中,您需要考虑您想要使用的等级规格化(均值对z-得分)、您想要使用的相似度权重计算方法(例如,Cosine vs Pearson相关性和其他相似度量)、邻域选择标准(邻居的预过滤、预测中涉及的邻居数)以及您想要实现的任何降维方法(SVD、SVD++) (对于像您这样的大型数据集,您将需要认真考虑DM)。
因此,与其寻找能够处理数据集的开放源代码,不如首先考虑算法的选择,然后寻找具有此算法实现的工具,然后评估它是否可以处理数据集中涉及的卷。
说到这一切,如果你选择沿着基于用户的协作过滤路线,那么我相信Apache Mahout将能够解决您的问题,如果不是,它肯定会帮助您理解构建自己的问题所涉及的复杂性(只需查看它们的源代码)。
请注意,建议是真正考虑算法的选择。“好”推荐系统不仅仅是能够处理大型数据集。您需要考虑准确性、覆盖率、信心、新颖性、意外、多样性、健壮性、隐私、风险用户信任,以及最终的可伸缩性。您还应该考虑如何执行实验和评估您的建议,记住,如果您正在提出的建议是垃圾,这是让您的用户关闭,那么就没有意义,有一个推荐系统!
这是一个很大的领域,有很多需要思考的地方,可能没有一个单一的工具能帮助你所有的事情,所以准备做大量的阅读和研究,以及实现许多不同的开源工具来帮助你。
说到这里,开始看看Apache。回到我说过的三个方面的崩溃,你应该考虑一下。
希望这有帮助,祝你好运。
https://stackoverflow.com/questions/24383646
复制相似问题