TOP 10 开源的推荐系统简介

最 近这两年推荐系统特别火,本文搜集整理了一些比较好的开源推荐系统,即有轻量级的适用于做研究的SVDFeature、LibMF、LibFM等,也有重 量级的适用于工业系统的 Mahout、Oryx、EasyRecd等,供大家参考。PS:这里的top 10仅代表个人观点。

#1.SVDFeature

主页:http://svdfeature.apexlab.org/wiki/Main_Page 语言:C++
一个feature-based协同过滤和排序工具,由上海交大Apex实验室开发,代码质量较高。在KDD Cup 2012中获得第一名,KDD Cup 2011中获得第三名,相关论文 发表在2012的JMLR中,这足以说明它的高大上。
SVDFeature
包含一个很灵活的Matrix Factorization推荐框架,能方便的实现SVD、SVD++等方法,
 是单模型推荐算法中精度最高的一种。SVDFeature代码精炼,可以用
相对较少的内存实现较大规模的单机版矩阵分解运算。另外含有Logistic
 regression的model,可以很方便的用来进行ensemble。

#2.LibMF

主页:http://www.csie.ntu.edu.tw/~cjlin/libmf/ 语言:C++
作者Chih-Jen Lin来自大名鼎鼎的台湾国立大学,他们在机器学习领域享有盛名,近年连续多届KDD Cup竞赛上均 获得优异成绩,并曾连续多年获得冠军。台湾大学的风格非常务实,业界常用的LibSVM, Liblinear等都是他们开发的,开源代码的效率和质量都非常高。
LibMF
在矩阵分解的并行化方面作出了很好的贡献,针对SGD(随即梯度下降)优化方法在并行计算中存在的locking problem和memory
 discontinuity问题,提出了一种 矩阵分解的高效算法FPSGD(Fast Parallel
 SGD),根据计算节点的个数来划分评分矩阵block,并分配计算节点。系统介绍可以见这篇 论文(ACM Recsys 2013的 Best paper Award)。

#3.LibFM

主页:http://www.libfm.org/ 语言:C++
作者是德国Konstanz大学的Steffen Rendle,他用LibFM同时玩转KDD Cup 2012 Track1和Track2两个子竞赛单元,都取得了很好的成绩,说明LibFM是非常管用的利器。
LibFM
是专门用于矩阵分解的利器,尤其是其中实现了MCMC(Markov Chain Monte
 Carlo)优化算法,比常见的SGD优化方法精度要高,但运算速度要慢一些。当然LibFM中还 实现了SGD、SGDA(Adaptive
 SGD)、ALS(Alternating Least Squares)等算法。

#4.Lenskit

主页:http://lenskit.grouplens.org/ 语言Java

这个Java开发的开源推荐系统,来自美国的明尼苏达大学的GroupLens团队,也是推荐领域知名的测试数据集Movielens的作者。
该源码托管在GitHub上,https://github.com/grouplens/lenskit
主要包含lenskit-api,lenskit-core,
 lenskit-knn,lenskit-svd,lenskit-slopone,lenskit-parent,lenskit-data-
structures,lenskit-eval,lenskit-test等模块,主要实现了k-NN,SVD,Slope-One等
 典型的推荐系统算法。

#5.GraphLab

主页:GraphLab - Collaborative Filtering 语言:C++
Graphlab
是基于C++开发的一个高性能分布式graph处理挖掘系统,特点是对迭代的并行计算处理能力强(这方面是hadoop的弱项),由于功能独
到,GraphLab在业界名声很响。 用GraphLab来进行大数据量的random
 walk或graph-based的推荐算法非常有效。Graphlab虽然名气比较响亮(CMU开发),但是对一般数据量的应用来说可能还用不上。
GraphLab
主要实现了ALS,CCD++,SGD,Bias-SGD,SVD++,Weighted-ALS,Sparse-ALS,Non-negative
 Matrix Factorization,Restarted Lanczos Algorithm等算法。

#6.Mahout

主页:http://mahout.apache.org/ 语言:Java
Mahout
 是 Apache Software Foundation (ASF)
 开发的一个全新的开源项目,其主要目标是创建一些可伸缩的机器学习算法,供开发人员在 Apache 在许可下免费 使用。Mahout项目是由
 Apache Lucene社区中对机器学习感兴趣的一些成员发起的,他们希望建立一个可靠、文档翔实、可伸缩的项目,在其中实现一些常见的用于
 聚类和分类的机器学习算法。该社区最初基于 Ngetal. 的文章 “Map-Reduce for Machine Learning on
 Multicore”,但此后在发展中又并入了更多广泛的机器学习 方法,包括Collaborative
 Filtering(CF),Dimensionality Reduction,Topic Models等。此外,通过使用 Apache
 Hadoop 库,Mahout 可以有效地扩展到云中。
在Mahout的Recommendation类算法中,主要有User-Based CF,Item-Based CF,ALS,ALS on Implicit Feedback,Weighted MF,SVD++,Parallel SGD等。

#7.Myrrix

主页:http://myrrix.com/ 语言:Java
Myrrix
最初是Mahout的作者之一Sean
 Owen基于Mahout开发的一个试验性质的推荐系统。目前Myrrix已经是一个完整的、实时的、可扩展的集群和推荐系统,主要
 架构分为两部分:服务层:在线服务,响应请求、数据读入、提供实时推荐;计算层:用于分布式离线计算,在后台使用分布式机器学习算法为服务层更新机器学
习  
模型。Myrrix使用这两个层构建了一个完整的推荐系统,服务层是一个HTTP服务器,能够接收更新,并在毫秒级别内计算出更新结果。服务层可以单独使
用,无需 计算层,它会在本地运行机器学习算法。计算层也可以单独使用,其本质是一系列的Hadoop jobs。目前Myrrix以被
 Cloudera 并入Oryx项目。

#8.EasyRec

主页:http://easyrec.org/ 语言:Java
EasyRec
是一个易集成、易扩展、功能强大且具有可视化管理的推荐系统,更像一个完整的推荐产品,包括了数据录入模块、管理模块、推荐挖掘、离线分析等。
 EasyRec可以同时给多个不同的网站提供推荐服务,通过tenant来区分不同的网站。架设EasyRec服务器,为网站申请tenant,通过
tenant就可以很方便的集成到
 网站中。通过各种不同的数据收集(view,buy.rating)API收集到网站的用户行为,EasyRec通过离线分析,就可以产生推荐信息,您
的 网站就可以通过 Recommendations和Community Rankings来进行推荐业务的实现。

#9.Waffles

主页:http://waffles.sourceforge.net/ 语言:C++
Waffles
英文原意是蜂蜜甜饼,在这里却指代一个非常强大的机器学习的开源工具包。Waffles里包含的算法特别多,涉及机器学习的方方面面,推荐系统位于
 其中的Waffles_recommend
 tool,大概只占整个Waffles的1/10的内容,其它还有分类、聚类、采样、降维、数据可视化、音频处理等许许多多工具包,估计
 能与之媲美的也就数Weka了。

#10.RapidMiner

主页:http://rapidminer.com/ 语言:Java
RapidMiner(前
身是Yale)是一个比较成熟的数据挖掘解决方案,包括常见的机器学习、NLP、推荐、预测等方法(推荐只占其中很小一部分),而且带有GUI的
 数据分析环境,数据ETL、预处理、可视化、评估、部署等整套系统都有。另外RapidMiner提供commercial
 license,提供R语言接口,感觉在向着一个商用的 数据挖掘公司的方向在前进。
======================================分割线======================================


源的推荐系统大大小小的还有很多,以上只是介绍了一些在学术界和工业界比较流行的TOP
 10,而且基本上都是用C++/Java实现的,在参考资料[1]、[2]中还提
 到的有Crab(Python)、CofiRank(C++)、MyMediaLite(.NET/C#)、PREA(Java)、Python-
recsys(Python)、Recommendable(Ruby)、Recommenderlab(R)、
 Oryx(Java)、recommendify(Ruby)、RecDB(SQL)等等,当然GitHub上还有更多。。。即有适合单机运行的,也有
适 合集群的。虽然使用的编程语言不同,但实现 的算法都大同小异,主要是SVD、SGD、ALS、MF、CF及其改进算法等。

参考资料

[1]推荐系统开源软件列表汇总和点评
[2]开源中国社区 - 搜索:推荐系统

Original Link: http://ibillxia.github.io/blog/2014/03/10/top-10-open-source-recommendation-systems/
Attribution - NON-Commercial - ShareAlike - Copyright © Bill Xia

原文出处:@Cheedoong

时间: 2024-10-08 13:47:41

TOP 10 开源的推荐系统简介的相关文章

TOP 10开源的推荐系统简介

最近这两年推荐系统特别火,本文搜集整理了一些比较好的开源推荐系统,即有轻量级的适用于做研究的SVDFeature.LibMF.LibFM等,也有重量级的适用于工业系统的 Mahout.Oryx.EasyRecd等,供大家参考.PS:这里的top 10仅代表个人观点. #1.SVDFeature 主页:http://svdfeature.apexlab.org/wiki/Main_Page 语言:C++一个feature-based协同过滤和排序工具,由上海交大Apex实验室开发,代码质量较高.在

10款开源的推荐系统简介

最近这两年推荐系统特别火,本文搜集整理了一些比较好的开源推荐系统,即有轻量级的适用于做研究的SVDFeature.LibMF.LibFM等,也有重量级的适用于工业系统的 Mahout.Oryx.EasyRecd等,供大家参考.PS:这里的top 10仅代表个人观点. 1.SVDFeature 主页:http://svdfeature.apexlab.org/wiki/Main_Page 语言:C++ 一个feature-based协同过滤和排序工具,由上海交大Apex实验室开发,代码质量较高.在

Top 10 Mistakes Java Developers Make(转)

文章列出了Java开发者最常犯的是个错误. 1.将数组转换为ArrayList 为了将数组转换为ArrayList,开发者经常会这样做: ? 1 List<String> list = Arrays.asList(arr); Arrays.asList()会返回一个ArrayList,但这个ArrayList是Arrays的私有静态类,不是java.util.ArrayList.java.util.Arrays.ArrayList有set(), get(), contains()方法,但没有任

开发Node.js应用最佳IDE Top 10(下)

在开发Node.js应用最佳IDE Top 10(上)一文中,我们为大家介绍了排名前5的开发Node.js应用最佳的IDE,有Cloud 9.Intellij IDEA.WebStorm.Komodo.Koding这五个最受欢迎的IDE.今天,我们将继续为大家揭晓余下的排名,一起来看看都有哪些IDE榜上有名吧! 6) Eclipse Eclipse是一个使用Java. PHP.C++等开发Web的基于云的流行IDE.您可以使用Node.js插件轻松地利用Eclipse IDE的nodeclips

Top 10 questions about Java Collections--reference

reference from:http://www.programcreek.com/2013/09/top-10-questions-for-java-collections/ The following are the most popular questions of Java collections asked and discussed on Stackoverflow. Before you look at those questions, it's a good idea to s

Top 10 Algorithms of 20th and 21st Century

Top 10 Algorithms of 20th and 21st Century MATH 595 (Section TTA) Fall 2014 TR 2:00 pm - 3:20 pm, Room 341 Altgeld HallUniversity of Illinois at Urbana-Champaign, Department of Mathematics Instructors : Yuliy Baryshnikov and Anil N. Hirani Schedule:I

Top 10 Mistakes Java Developers Make--reference

This list summarizes the top 10 mistakes that Java developers frequently make. #1. Convert Array to ArrayList To convert an array to an ArrayList, developers often do this: List<String> list = Arrays.asList(arr); Arrays.asList() will return an Array

Top 10 Methods for Java Arrays

作者:X Wang 出处:http://www.programcreek.com/2013/09/top-10-methods-for-java-arrays/ 转载文章,转载请注明作者和出处 The following are top 10 methods for Java Array. They are the most voted questions from stackoverflow. 0. Declare an array String[] aArray = new String[5

Top 10 Free Wireless Network hacking/monitoring tools for ethical hackers and businesses

There are lots of free tools available online to get easy access to the WiFi networks intended to help the network admins and the programmers working on the WiFi systems and we at Team Techworm have picked the top 10 of those for ethical hackers, pro