草庐IT

hadoop - 我应该选择哪种开源推荐系统来处理大数据集

coder 2024-01-07 原文

我想构建一个推荐系统,目标是处理真正的大数据集,例如1 TB数据。

每个用户确实拥有大量商品,但是用户数量很少,例如数千或10,000。

我从Google进行搜索,我发现有一些基于hadoop的开源推荐引擎,例如 Mahout ,我想它可能具有处理如此大数据的能力,但是我不确定。

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

还是我错了?可以给我一些建议吗?

最佳答案

您的问题标题是:

Which opensource recommendation system should I choose to deal with big dataset?



在第一行中,您说

I want to build a recommendation system, and the target is to deal with really big data set, > like 1 TB data.



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

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

关于应该选择哪种开源推荐系统,实际上很难以很高的准确性回答。让我尝试通过分解来回答这个问题。
  • 考虑开源许可证,它的限制和您的要求。
  • 考虑要使用哪种算法提出建议
  • 考虑将在其上运行推荐系统的环境。

  • 我建议您更多地考虑算法方面,因为它将是可以使用哪种工具或是否需要自己动手的决定性因素。在这里开始阅读http://www.ibm.com/developerworks/library/os-recommender1/,以非常简短地了解推荐系统使用的不同方法。总之,不同的方法是:
  • 基于内容的
  • 基于邻域/基于协同过滤的
  • 基于约束的
  • 基于图的

  • 在您的情况下,为了使事情保持相对简单,听起来您应该考虑为此使用用户-用户协作过滤算法。原因是:
  • 邻居协作过滤非常直观易懂,并且相对容易实现。
  • 使用这种方法,您还可以通过基本方式向用户证明您的建议
  • 不需要构建训练模型,邻居的处理可以“离线”完成,以向最终用户提供快速建议。
  • 存储邻居实际上是相当高效的内存,这意味着更好的可伸缩性。听起来您需要很多东西。

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

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

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

    说了这么多,如果您确实选择遵循基于用户的协作过滤路线,那么我相信Apache Mahout将能够解决您的问题,如果不能,那么它肯定会帮助您了解构建自己的复杂性。自己的(只看他们的源代码)。

    请注意,建议实际上是考虑算法的选择。 “好的”推荐系统不仅能够处理大型数据集,还具有更多的功能。您需要考虑准确性,覆盖范围,信心,新颖性,偶然性,多样性,健壮性,隐私性,风险用户信任度以及最后的可伸缩性。您还应该考虑如何进行实验和评估建议,请记住,如果您提出的建议是垃圾,并且正在关闭用户,那么没有必要使用推荐系统!

    这个 Realm 太多了,需要思考的地方很多,可能没有一个工具可以为您提供所有帮助,因此请做好准备进行大量阅读和研究,以及实现许多不同的开源工具以进行准备。帮你。

    这么说吧,开始研究Apache Mahout。回到我要考虑的三个方面的分解。
  • 它具有商业友好的开源许可证
  • 它确实很好地实现了您可能需要使用的算法,并且
  • 它可以在分布式环境下工作(可扩展读取)。

  • 希望能有所帮助,祝你好运。

    关于hadoop - 我应该选择哪种开源推荐系统来处理大数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24383646/

    有关hadoop - 我应该选择哪种开源推荐系统来处理大数据集的更多相关文章

    1. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

      我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

    2. ruby - 如何指定 Rack 处理程序 - 2

      Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

    3. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

      为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

    4. ruby - Ruby 的 Hash 在比较键时使用哪种相等性测试? - 2

      我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。

    5. ruby - Ruby 有 `Pair` 数据类型吗? - 2

      有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

    6. ruby - Rails 3 的 RGB 颜色选择器 - 2

      状态:我正在构建一个应用程序,其中需要一个可供用户选择颜色的字段,该字段将包含RGB颜色代码字符串。我已经测试了一个看起来很漂亮但效果不佳的。它是“挑剔的颜色”,并托管在此存储库中:https://github.com/Astorsoft/picky-color.在这里我打开一个关于它的一些问题的问题。问题:请建议我在Rails3应用程序中使用一些颜色选择器。 最佳答案 也许页面上的列表jQueryUIDevelopment:ColorPicker为您提供开箱即用的产品。原因是jQuery现在包含在Rails3应用程序中,因此使用基

    7. ruby-on-rails - Rails 中的推荐引擎 - 2

      我想为我的Rails网络应用程序提供推荐功能。特别是,我想向新注册的用户推荐他可能想要关注的其他用户。Rails中是否有用于此目的的引擎/gem?如果没有,我应该从哪里开始构建它?谢谢。 最佳答案 有Coletivogemhttps://github.com/diogenes/coletivo我试了一下。在MySQL上运行。Neo4jhttp://neo4j.org真的很容易实现一个“跟随谁”。事实上,大多数展示其能力的样本都涉及“跟随谁”。快速提示-只有在JRuby上运行时,Neo4j.rb才会很酷。如果不是-使用Neograph

    8. java - 我的模型类或其他类中应该有逻辑吗 - 2

      我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我

    9. ruby - 我如何添加二进制数据来遏制 POST - 2

      我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

    10. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

      无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

    随机推荐