[转]开源推荐系统框架

以下内容是转至盛大创新研究院官方博客的一篇文章http://in.sdo.com/?p=1707,文中几乎涵盖了当今主流的推荐系统开源软件,我把全文都贴过来了,不过与原文不同的是我把有些已经停止更新/或者更新很慢的都往后面排了。另外也写写自己的一些使用总结。
原文开始:
收集和整理了目前互联网上能找到的开源推荐系统,并附上了个人的一些简单点评(未必全面准确),这个列表是目前为止比较全面的了,希望对大家了解掌握推荐系统有帮助(文/陈运文)

SVDFeature
由上海交大的同学开发,采用C++语言,代码质量很高。去年我们参加KDD竞赛时用过,很好很方便,而且出自咱们国人之手,所以置顶推荐!
项目地址:
http://svdfeature.apexlab.org/wiki/Main_Page

SVDFeature包含一个很灵活的Matrix Factorization推荐框架,能方便的实现SVD、SVD++等方法, 是单模型推荐算法中精度最高的一种。SVDFeature代码精炼,可以用相对较少的内存实现较大规模的单机版矩阵分解运算。

另外含有Logistic regression的model,可以很方便的用来进行ensemble运算

** 备注:这个真是单机版 推荐神器,能在4G的电脑上,跑1.5G的用户-物品评分数据,而且速度也还可以,当时给我吃了一惊。该项目文档相当齐全包含:理论和样例的demo,把评分预测当做矩阵分解、分类、Ranking来做。正如项目介绍,它提供了特征-矩阵分解的框架,你只需腾出双手,结合业务场景去提取用户的特征。如果用来参加推荐/机器学习方面的比赛,其中的GBRT跟逻辑回归的各种模型集成,更是加了一层保证。总而言之,它就是你的欧莱雅,你值得拥有!**

Mahout
网址
http://mahout.apache.org/

Mahout知名度很高,它是Apache基金资助的重要项目,在国内流传很广,并已经有一些中文相关书籍了。注意Mahout是一个分布式机器学习算法的集合,协同过滤只是其中的一部分。除了被称为Taste的分布式协同过滤的实现(Hadoop-based,另有pure Java版本),Mahout里还有其他常见的机器学习算法的分布式实现方案。


另外Mahout的作者之一Sean Owen基于Mahout开发了一个试验性质的推荐系统,称为Myrrix, 可以看这里:
http://myrrix.com/quick-start/
备注:也许受到到graphlab跟PredictOI等大数据预测软件的压力,最近Mahout也加快了更新速度,截止现在已经到了V0.9了。这个库最大的优势是能处理大的数据量,里面不仅有推荐还有分类,回归,主题模型等,具体做推荐的时候还可以结合业务修改下相似度计算公式
MyMediaLite
http://mymedialite.net/index.html
基于.NET框架的C#开发(也有Java版本),作者基本来自德国、英国等欧洲的一些高校。
除了提供了常见场景的推荐算法,MyMediaLite也有Social Matrix Factorization这样独特的功能
尽管是.Net框架,但也提供了Python、Ruby等脚本语言的调用API
MyMediaLite的作者之一Lars Schmidt在2012年KDD会议上专门介绍过他们系统的一些情况,可惜由于.Net开发框架日渐式微,MyMediaLite对Windows NT Server的系统吸引力大些,LAMP网站用得很少

   **备注:这个软件也是相当的赞,不仅算法完整,文档清晰,还提供指标测试、交叉验证寻参等,需要注意的一点是,当数据量较大的时候,最好要重新编译一下C#的运行库Mono --with-large-heap=yes 把内存搞大一点,不然很容易out of memory**。

GraphLab
项目地址:
http://graphlab.org/


Graphlab是基于C++开发的一个高性能分布式graph处理挖掘系统,特点是对迭代的并行计算处理能力强(这方面是hadoop的弱项),
由于功能独到,GraphLab在业界名声很响
用GraphLab来进行大数据量的random walk或graph-based的推荐算法非常有效。
Graphlab虽然名气比较响亮(CMU开发),但是对一般数据量的应用来说可能还用不上

    **备注:正如软件的名字一样,该软件专注于图方面的挖掘,不过其中包含一个推荐的toolkit,里面有很多矩阵分解类的算法,另外该软件的另外一个兄弟Graphchi,又一大单机神奇。前段新闻,就说Mac mini笔记本部署的grapchi 在推特图谱的计算上超越了1613节点的hadoop。我做的另外一个应用就是在一台服务器上部署了Graphchi ,在中等数据量上毫无鸭梨。**LibFM

项目网址:
http://www.libfm.org/
作者是德国Konstanz University的Steffen Rendle,去年KDD Cup竞赛上我们的老对手,他用LibFM同时玩转Track1和Track2两个子竞赛单元,都取得了很好的成绩,说明LibFM是非常管用的利器(虽然在Track1上被我们打败了,hiahia)
顾名思义,LibFM是专门用于矩阵分解的利器,尤其是其中实现了MCMC(Markov Chain Monte Carlo)优化算法,比常见的SGD(随即梯度下降)优化方法精度要高(当然也会慢一些)


顺便八卦下,去年KDD会议上和Steffen当面聊过,他很腼腆而且喜欢偷笑,呵呵挺可爱。
备注:在预测评分方面是神奇,不过相对来讲速度较慢,尤其用MCMC算法的时候,不过总的来说还是非常好的一款软件
LibMF
项目地址:
http://www.csie.ntu.edu.tw/~cjlin/libmf/

注意LibMF和上面的LibFM是两个不同的开源项目。这个LibMF的作者是大名鼎鼎的台湾国立大学,他们在机器学习领域享有盛名,近年连续多届KDD Cup竞赛上均获得优异成绩,并曾连续多年获得冠军。台湾大学的风格非常务实,业界常用的LibSVM, Liblinear等都是他们开发的,开源代码的效率和质量都非常高

LibMF在矩阵分解的并行化方面作出了很好的贡献,针对SDG优化方法在并行计算中存在的locking problem和memory discontinuity问题,提出了一种矩阵分解的高效算法,根据计算节点的个数来划分评分矩阵block,并分配计算节点。系统介绍可以见这篇论文(Recsys 2013的 Best paper Award)
Y. Zhuang, W.-S. Chin, Y.-C. Juan, and C.-J. Lin. A Fast Parallel SGD for Matrix Factorization in Shared Memory Systems. Proceedings of ACM Recommender Systems 2013.


     **备注:我相信Libsvm,很多人用过,没错,这个LibMF就是林志仁教授那个团队写的,速度、质量值得信赖**

Lenskit
http://lenskit.grouplens.org/
这个Java开发的开源推荐系统,来自美国的明尼苏达大学,也是推荐领域知名的测试数据集Movielens的作者,
他们的推荐系统团队,在学术圈内的影响力很大,很多新的学术思想会放到这里


备注:明尼苏达大学推荐团队的杰作,另外该团队还在Coursera上开了一门推荐系统 的公开课,课程的作业就可以用这个软件来做。

Crab
项目地址:
http://geektell.com/story/crab-recommender-systems-in-python/

系统的Tutorial可以看这里:
http://muricoca.github.io/crab/

Crab是基于Python开发的开源推荐软件,其中实现有item和user的协同过滤。据说更多算法还在开发中,
Crab的python代码看上去很清晰明了,适合一读

  **备注:Python写的,其中的作者就是下面的Python-recsys作者,看github上一个印度的哥们(猜的,挺黑的,呵呵)。**

CofiRank
C++开发的 Collaborative Filtering算法的开源推荐系统,但似乎2009年后作者就没有更新了,
CofiRank依赖boost库,联编会比较麻烦。不是特别推荐
项目地址:
http://www.cofirank.org/

EasyRec
Java开发的推荐系统,感觉更像一个完整的推荐产品,包括了数据录入模块、管理模块、推荐挖掘、离线分析等,整个系统比较完备。
项目地址:
http://easyrec.org/

PREA
全名是 Personalized Recommendation Algorithms Toolkit, 开发语言为Java。也是一个轻量级的开源项目
项目网址:
http://mloss.org/software/view/420/

放在Mloss这个大project下。我个人感觉PREA还是比较简陋的,参加开发的三位工程师Joonseok Lee, Mingxuan Sun, Guy Lebanon更新频率很低,提供的资料也少。

不过Mloss下倒是能找到其他一些推荐开源项目
http://mloss.org/software/tags/collaborative-filtering/

Python-recsys
一个非常轻量级的开源推荐系统,python开发,作者似乎只有一位,
Python-recsys主要实现了SVD、Neighborhood SVD推荐算法,
这个项目麻雀虽小五脏俱全,评估数据(Movielens,Last.fm)、评估框架也都有
API也很简单清晰,代码简洁,属于推荐入门的良好教材。
不过真正要用到实际系统中,还是得补充很多内容

github的地址位于
https://github.com/ocelma/python-recsys

项目的介绍见:
http://ocelma.net/software/python-recsys/build/html/
备注:用过,不过使用的时候发现两次运行的结果不一致,让我很是蛋疼,另外运行速度一般(尽管可以用稀疏的矩阵库,但速度还是不敢恭维)。
RapidMiner
项目网址为:
http://rapidminer.com/
Java语言开发,RapidMiner(前身是Yale)已经是一个比较成熟的数据挖掘解决方案了,包括常见的机器学习、NLP、推荐、预测等方法(推荐只占其中很小一部分),而且带有GUI的数据分析环境,数据ETL、预处理、可视化、评估、部署等整套系统都有。


另外RapidMiner提供commercial license,提供R语言接口,感觉在向着一个商用的数据挖掘公司的方向在前进。

Recommendable
基于Ruby语言开发,实现了一些评分预测的推荐算法,但是整体感觉比较单薄,
github上地址如下:
https://github.com/davidcelis/recommendable/
备注:没用过。

Recommenderlab
基于R语言开发的开源推荐程序,对经常使用R语言的工程师或者BI数据分析师来说,recommenderlab的出现绝对算得上是福音了
项目地址:
http://cran.r-project.org/web/packages/recommenderlab/index.html

基于Recommenderlab来开发推荐系统,代码会非常精简,因为推荐系统所依赖的user-item rating matrix对擅长处理向量运算的R语言来说再方便不过了,
但是在实际推荐系统中,需要考虑的问题和逻辑都比较复杂,用Recommenderlab不是很灵活。另外受限于R语言对内存的限制,Recommenderlab不太适用于过大规模的推荐应用
备注:速度跟内存,还是需要考虑的问题。

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

除了上面的开源软件之外,还有一些其他开源
http://prediction.io/ PredictionIO
http://graphlab.com/products/create/index.html Graphlab的 网页版,目前还在beta
http://www.duineframework.org/ 推荐开源框架
最近火热的Spark
来源地址:http://www.cnblogs.com/kobedeshow/p/3560835.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容