想學習推薦系統,如何從小白成為高手?

現在在看推薦系統實踐,會JAVA,正在加Python,看完這本書下一步該怎麼做,求賜教


同在學習推薦演算法,大概介紹一下我自己規劃的推薦演算法學習軌跡(還在慢慢實踐中,好長時間了,捂臉...)。

首先,看完了推薦系統實戰的話,應該大概了解了大部分的推薦演算法。那我覺得看完了書,應該有必要再從宏觀上再來了解一下推薦系統這個研究領域的研究現狀,包括研究領域目前有的挑戰,比如冷啟動問題,大規模矩陣分解問題,增量模型計算問題等等,包括目前熱門的研究方向,比如基於LBS、社交網路等等的推薦。最方便的了解這些問題的途徑當然就是看論文了,找到 Recommender System相關最新的Review 或者Survey 文章,多讀幾篇。這些文章往往是該領域的大牛所著,往往會非常良心的收集了近十幾年來該領域的研究成果,分析好壞,做出比較,非常贊。

然後,看完理論演算法就要到演算法實現層面來了,一些簡單的演算法,比如UCF,ICF,SlopeOne等等演算法,完全可以根據自己的理解手動編一編,更好的來對它做理解。當然藉助於開源解決方案也是一種非常好的學習方法。這裡有幾篇總結的很好的推薦系統開源軟體介紹:

推薦系統開源軟體列表匯總和點評

TOP 10開源的推薦系統簡介

如果樓主會JAVA,那就果斷推薦Mahout了,雖然Mahout是在2011年搞出來的,但是它對Hadoop的支持做的不錯,而且最新版本的Mahout即將拋棄Mapreduce,轉向Spark了,背後還有阿帕奇基金會的支持,相信會是不錯的選擇。Python的用過Recommender Systems Framework in Python (Crab) 代碼比較簡潔,適合一讀,號稱是Mahout的python版本。其他的開源軟體樓主也可以關注關注。特別之前兩篇中提到的Myrrix,它是Mahout的作者之一Sean Owen基於Mahout開發的一個試驗性質的推薦系統,目前已經併入Oryx項目,Oryx1.0 (cloudera/oryx · GitHub )已經發布,Oryx2.0也正在孵化中,相較於1.0版本,Oryx2.0更好的實現了lambda架構,使得各個層之間可復用性更強。實現了比1更多的機器學習演算法(1.0隻實現了,ALS協同過濾,隨機森林,以及K-means++演算法)同時2.0版本還引入更新的Spark和Streaming技術。總之社區更新非常活躍,所用的技術也非常前沿,適合學慣用。

最後,(我也還停留在這一步)了解了這些東西我覺得就應該去實踐了(其實邊實踐邊了解可能更好),找一份實習,或者相關的工作,看看如何將所學到的演算法真正的結合到特定 的業務中去,不同的模型,不同的推薦演算法如何進行融合,如何解決冷啟動,如何解決大規模的計算等等。不同的業務比如電商,音樂,電影,新聞,諮詢等等的推薦,都會有相對應的特色的方法。先進的演算法和解決方案固然重要,但是如何深刻的理解業務,提取一些用特徵,總結一些業務經驗,有時候往往會比幾個乾淨的演算法,融合幾個模型對業務提升更有效。

以上都是愚見,望與大家一起學習交流。


做了幾年推薦的工作,也帶出過幾個應屆生,說說我的看法吧。

首先,剛剛接觸的階段不要去考慮太多演算法層面的東西,而是要先弄明白推薦是做什麼的,為什麼要有個性化推薦,個性化推薦的主要應用場景有哪些。其實這樣做的好處就是要從最開始就保持一個業務的思維,等做的多了你會發現,演算法層面的提升很困難了,有時候花大力氣優化出來的演算法可能不如在數據的處理過程中加一個策略來的有效。

其次,演算法方面,就還是從基本的CF入手,這是最經典演算法,最古老的演算法,同時也是當前互聯網市場的生產環境中用的最多的演算法。其實準確來說這不是一個演算法,而是一系列演算法,後期很多所謂的新演算法也是由其衍生出來的。所以一定要吃透,包括幾種不同的similarity的計算方法和異同點、用戶評分的計算方式、顯反饋和隱反饋數據怎麼用等等。看懂了CF相關的內容,應該說你就已經入門了,後面再去學新東西也就輕鬆很多。

第三,在有了上面的理論基礎以後,還是要多動手實踐。如果有實習能接觸到實際的業務數據最好,沒有的話就去看一些經典的推薦相關的比賽,像最有名的Netflix的,還有kaggle上面的,都有數據,自己實現演算法去跑數據,想辦法優化,然後再去看別人是怎麼做的,慢慢的就會有很多收穫。

最後,通過上面這些步驟以後,相信你已經有了一定的基礎了,那如果想提高,還是要多看paper。每年recsys都產出很多優質的paper,可能會有一些引領未來潮流的演算法出現,多關注多嘗試。

其實,當你把以上這些都做了以後,你會發現推薦這個領域有多廣闊,有信息的地方就會有推薦。推薦演算法涉及到的東西遠不止用戶、物品、評分。好的策略能提升演算法,好的presentation能提升演算法,甚至好的產品也能給演算法以質的飛躍。這就是為什麼一個好的推薦工程師一定要是一個對產品業務足夠熟悉的人的原因了。

還有很多可以談的點,就不展開討論了,祝早日成為一個推薦領域的高手。


這要看的目前掌握的知識層次和知識結構。簡單地說一下整個推薦系統用到的知識吧

策略演算法:

1)數學理論

i) 統計模型相關:概率論、數理統計、貝葉斯分析(很多以貝葉斯學派理論建模的統計模型,注如LDA等)、回歸分析、時間序列分析、隨機過程 等等

ii) 其他模型相關(相對用得較少):常微分、偏微分、組合學、拓撲學等等

iii) 模型求解相關: 矩陣論(基礎知識)、數值優化、凸優化、隨機模擬等

2)演算法應用

i) 方法論:數據挖掘、機器學習、信息檢索

ii) 演算法教程:《Recommender Systems Handbook》

iii) 行業動態:各種推薦系統相關的paper和會議

iv) 研發工具:hadoop、spark、flume、storm、hive、hbase、kafka、redis、(java、c++) 、python 等等。

系統工程 :

1) 日誌收集相關:flume、kafka(當然,不止應用到日誌收集的環節)

2)分散式批處理框架:hadoop (Mapreduce)、spark

3) 分散式流式計算框架: storm

4)數據存儲相關:hadoop (HDFS)、hive、hbase、redis、mysql、oracle、NoSQL等等

5)開源索引框架:lucene、elasticSearch

6)在線服務相關:web開發相關技術

我主要是做推薦演算法開發、推薦系統的策略架構和工程架構設計以及部分工程架構開發。遺漏的地方,等後面的各位道友補充。


推薦入門書籍 《集體智慧編程》


推薦系統是一個複雜系統,除了編程語言外,還要了解大數據處理,數據分析,機器學習,詳細可以看下我的文章和專欄,個性化推薦系統(二)---構建推薦引擎

https://zhuanlan.zhihu.com/p/29856074?utm_medium=socialutm_source=ZHShareTargetIDMore


關於比較牛的期刊 的最新文章 如果這個是近期比較熱門的研究領域 肯定會有相應的文章出來


推薦閱讀:

如何看待人民網三評演算法推薦?
廣告投放和排序效果如何進行多目標優化?
最近我在完成一個旅遊個性化推薦系統的設計,裡面用到的關聯規則和一些協同過濾演算法,目前是用weka在做測試,有沒有對此比較熟悉的朋友?
類似微博的 feed 熱度演算法如何計算?
在線的比較成熟的語料庫有哪些?

TAG:機器學習 | 推薦系統 | 推薦系統實現 | 推薦演算法 |