如下內容是轉至盛大創新研究院官方博客的一篇文章http://in.sdo.com/?p=1707,文中幾乎涵蓋了當今主流的推薦系統開源軟件,我把全文都貼過來了,不過與原文不一樣的是我把有些已經中止更新/或者更新很慢的都日後面排了。另外也寫寫本身的一些使用總結。
原文開始:
收集和整理了目前互聯網上能找到的開源推薦系統,並附上了我的的一些簡單點評(未必全面準確),這個列表是目前爲止比較全面的了,但願對你們瞭解掌握推薦系統有幫助(文/陳運文)
SVDFeature
由上海交大的同窗開發,採用C++語言,代碼質量很高。去年咱們參加KDD競賽時用過,很好很方便,並且出自我們國人之手,因此置頂推薦!
SVDFeature包含一個很靈活的Matrix Factorization推薦框架,能方便的實現SVD、SVD++等方法, 是單模型推薦算法中精度最高的一種。SVDFeature代碼精煉,能夠用相對較少的內存實現較大規模的單機版矩陣分解運算。
另外含有Logistic regression的model,能夠很方便的用來進行ensemble運算
備註:這個真是單機版 推薦神器,能在4G的電腦上,跑1.5G的用戶-物品評分數據,並且速度也還能夠,當時給我吃了一驚。該項目文檔至關齊全包含:理論和樣例的demo,把評分預測當作矩陣分解、分類、Ranking來作。正如項目介紹,它提供了特徵-矩陣分解的框架,你只需騰出雙手,結合業務場景去提取用戶的特徵。若是用來參加推薦/機器學習方面的比賽,其中的GBRT跟邏輯迴歸的各類模型集成,更是加了一層保證。總而言之,它就是你的歐萊雅,你值得擁有!
Mahout
網址
Mahout知名度很高,它是Apache基金資助的重要項目,在國內流傳很廣,並已經有一些中文相關書籍了。注意Mahout是一個分佈式機器學習算法的集合,協同過濾只是其中的一部分。除了被稱爲Taste的分佈式協同過濾的實現(Hadoop-based,另有pure Java版本),Mahout裏還有其餘常見的機器學習算法的分佈式實現方案。
另外Mahout的做者之一Sean Owen基於Mahout開發了一個試驗性質的推薦系統,稱爲Myrrix, 能夠看這裏:
http://myrrix.com/quick-start/javascript
備註:也許受到到graphlab跟PredictOI等大數據預測軟件的壓力,最近Mahout也加快了更新速度,截止如今已經到了V0.9了。這個庫最大的優點是能處理大的數據量,裏面不只有推薦還有分類,迴歸,主題模型等,具體作推薦的時候還能夠結合業務修改下類似度計算公式
MyMediaLite
基於.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
項目地址:
Graphlab是基於C++開發的一個高性能分佈式graph處理挖掘系統,特色是對迭代的並行計算處理能力強(這方面是hadoop的弱項),
因爲功能獨到,GraphLab在業界名聲很響
用GraphLab來進行大數據量的random walk或graph-based的推薦算法很是有效。
Graphlab雖然名氣比較響亮(CMU開發),可是對通常數據量的應用來講可能還用不上
備註:正如軟件的名字同樣,該軟件專一於圖方面的挖掘,不過其中包含一個推薦的toolkit,裏面有不少矩陣分解類的算法,另外該軟件的另一個兄弟Graphchi,又一大單機神奇。前段新聞,就說Mac mini筆記本部署的grapchi 在推特圖譜的計算上超越了1613節點的hadoop。我作的另一個應用就是在一臺服務器上部署了Graphchi ,在中等數據量上毫無鴨梨。
LibFM
項目網址:
做者是德國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
這個Java開發的開源推薦系統,來自美國的明尼蘇達大學,也是推薦領域知名的測試數據集Movielens的做者,
他們的推薦系統團隊,在學術圈內的影響力很大,不少新的學術思想會放到這裏
備註:明尼蘇達大學推薦團隊的傑做,另外該團隊還在Coursera上開了一門推薦系統 的公開課,課程的做業就能夠用這個軟件來作。
Crab
項目地址:
系統的Tutorial能夠看這裏:
Crab是基於Python開發的開源推薦軟件,其中實現有item和user的協同過濾。聽說更多算法還在開發中,
Crab的python代碼看上去很清晰明瞭,適合一讀
備註:Python寫的,其中的做者就是下面的Python-recsys做者,看github上一個印度的哥們(猜的,挺黑的,呵呵)。
CofiRank
C++開發的 Collaborative Filtering算法的開源推薦系統,但彷佛2009年後做者就沒有更新了,
CofiRank依賴boost庫,聯編會比較麻煩。不是特別推薦
項目地址:
EasyRec
Java開發的推薦系統,感受更像一個完整的推薦產品,包括了數據錄入模塊、管理模塊、推薦挖掘、離線分析等,整個系統比較完備。
項目地址:
PREA
全名是 Personalized Recommendation Algorithms Toolkit, 開發語言爲Java。也是一個輕量級的開源項目
項目網址:
放在Mloss這個大project下。我我的感受PREA仍是比較簡陋的,參加開發的三位工程師Joonseok Lee, Mingxuan Sun, Guy Lebanon更新頻率很低,提供的資料也少。
不過Mloss下卻是能找到其餘一些推薦開源項目
Python-recsys
一個很是輕量級的開源推薦系統,python開發,做者彷佛只有一位,
Python-recsys主要實現了SVD、Neighborhood SVD推薦算法,
這個項目麻雀雖小五臟俱全,評估數據(Movielens,Last.fm)、評估框架也都有
API也很簡單清晰,代碼簡潔,屬於推薦入門的良好教材。
不過真正要用到實際系統中,仍是得補充不少內容
github的地址位於
項目的介紹見:
備註:用過,不過使用的時候發現兩次運行的結果不一致,讓我非常蛋疼,另外運行速度通常(儘管能夠用稀疏的矩陣庫,但速度仍是不敢恭維)。
RapidMiner
項目網址爲:
Java語言開發,RapidMiner(前身是Yale)已是一個比較成熟的數據挖掘解決方案了,包括常見的機器學習、NLP、推薦、預測等方法(推薦只佔其中很小一部分),並且帶有GUI的數據分析環境,數據ETL、預處理、可視化、評估、部署等整套系統都有。
另外RapidMiner提供commercial license,提供R語言接口,感受在向着一個商用的數據挖掘公司的方向在前進。
Recommendable
基於Ruby語言開發,實現了一些評分預測的推薦算法,可是總體感受比較單薄,
github上地址以下:
備註:沒用過。
Recommenderlab
基於R語言開發的開源推薦程序,對常用R語言的工程師或者BI數據分析師來講,recommenderlab的出現絕對算得上是福音了
項目地址:
基於Recommenderlab來開發推薦系統,代碼會很是精簡,由於推薦系統所依賴的user-item rating matrix對擅長處理向量運算的R語言來講再方便不過了,
可是在實際推薦系統中,須要考慮的問題和邏輯都比較複雜,用Recommenderlab不是很靈活。另外受限於R語言對內存的限制,Recommenderlab不太適用於過大規模的推薦應用
備註:速度跟內存,仍是須要考慮的問題。
Waffles
SF地址:
Waffles英文原意是蜂蜜甜餅(見logo),在這裏卻指代一個很是強大的機器學習的開源工具包,基於C++語言開發。
Waffles裏包含的算法特別多,涉及機器學習的方方面面,推薦系統位於其中的Waffles_recommend tool,大概只佔整個Waffles的1/10的內容(其它還有分類、聚類、採樣、降維、數據可視化、音頻處理等許許多多工具包,估計能與之媲美的也就數Weka了)
除了上面的開源軟件以外,還有一些其餘開源
最近火熱的Spark