我想建立一个推荐系统,目标是处理真正的大数据集,如1 TB数据。
每个用户都有大量的项目,但用户数量很少,如数千或数万。
我从谷歌搜索,我发现有一些基于hadoop的开源推荐引擎,如 Mahout ,我想它可能有能力处理这么大的数据,但我'我不确定。
我也发现一些引擎用C ++ python编写,即使是php,我也不认为脚本语言可以处理这么大的数据,因为内存不能包含整个数据集。
或者我错了?有些人可以给我一些建议吗?
答案 0 :(得分:2)
您的问题标题是:
我应该选择哪个开源推荐系统来处理 大数据集?
并在第一行说出
我想建立一个推荐系统,目标是处理真正的大数据集,>比如1 TB数据。
您要求提供建议作为答案。
首先回答你的第二个问题。根据我构建推荐系统的经验,我建议你不要建立"构建"如果你可以避免它,从头开始推荐系统。推荐系统很复杂,可以使用多种技术为用户提供建议。所以我的建议是,除非你真的致力于此,并且拥有一支在推荐系统,统计和软件工程方面拥有丰富经验和知识的团队,然后寻求实施现有的推荐系统,而不是建立自己的推荐系统。
就您应该选择哪种开源推荐系统而言,这实际上非常难以准确回答。让我试着通过分解来解决这个问题。
我建议你更多地考虑算法方面,因为它将决定你可以使用哪种工具,或者你是否需要自己动手。从这里开始阅读http://www.ibm.com/developerworks/library/os-recommender1/,了解推荐系统使用的不同方法。总之,不同的方法是:
在你的情况下,为了使事情相对简单,听起来你应该考虑用户 - 用户协作过滤算法。原因是:
我建议的基于用户的部分是因为听起来你的用户少于你做的项目。在基于用户的最近邻域中,通过查看也评价了项目I并且与用户U最相似的其他用户来计算用户U的新项目I的预测评级。因为您的用户少于系统中的项目与基于项目的协同过滤相比,计算基于用户的协同过滤会更快。
在基于用户的协同过滤中,您需要考虑要使用的评级标准化(平均中心与z分数),相似权重计算方法(例如余弦与皮尔逊相关与其他相似性度量)您想要使用,邻域选择标准(邻居的预过滤,预测中涉及的邻居数量),以及您想要实现的任何维度降低方法(SVD,SVD ++)(使用像您这样的大型数据集,您将需要认真考虑DM)
所以真的不是寻找能够处理数据集的开源,而应首先考虑你的算法选择,然后寻找一个具有该算法实现的工具,然后评估它是否可以处理您的数据集中涉及的卷。
在说所有这些内容时,如果您确实选择了基于用户的协作过滤路线,那么我相信Apache Mahout将能够解决您的问题,如果不能,它肯定会帮助您了解所涉及的复杂性建立自己的(只需看看他们的源代码)。
请注意建议真的考虑算法选择。 "良好的"推荐系统不仅仅是能够处理大型数据集。您需要考虑准确性,覆盖范围,信心,新颖性,偶然性,多样性,稳健性,隐私性,风险用户信任以及最终的可扩展性。您还应该考虑如何进行实验并评估您的建议,记住您正在制作的建议是垃圾还是关闭用户,那么没有必要建立推荐系统!
这是一个有很多值得思考的大区域,可能没有任何一个工具可以帮助你解决所有事情,所以要做好准备做大量的阅读和研究以及实施许多不同的开放源工具,以帮助您。
在说,开始看Apache Mahout。回到我说你应该考虑的3个区域的分解。
希望有所帮助,祝你好运。