2013年5月26日 星期日

[筆記] 利用R + Hadoop 來實作分類、群組、推薦

圖片來源:computerweekly

每當談論到(Big) Data Analysis、Recommendation,到網路上搜尋相關的資料,通常會先找到一堆很High Level 的在描述這些技術很重要,這些技術可以帶來什麼商業價值的文章,看了會對Data science 感到很興奮,但是就僅止於此 (結論就是要找專家~)

但對於我們這些技術人員來說,就應該要變成那種專家啊,所以比較重要的是了解這些分析的運作原理,以及有哪些工具(演算法)可以利用。

正統一點的學習方式可以透過買書自修和看看線上教育課程,如我之前整理的關於Data analystis 線上課程,但是偷懶一點的方式就是上網搜尋看看有沒有人家整理好的資訊,不過大多只能找到看起來很艱深的論文內容,及一堆不明了的數學公式,偶而還是可以找到一些很有心的老師整理的線上教材,例:
 或是學生整理出來的資料:
不過在還沒吸收前這些都還只是別人腦袋裡的東西,所以我都透過整理這些資料和在Blogger寫下筆記來強迫自己吸收和學習,雖然有整理一些筆記:從推薦系統到Apache MahoutBig Data Analytic - Weka vs Mahout vs R,但是一直苦無時間好好深入研究,縱使已經準備要專研進去,一遇到數學相關的內容,馬上就會被施予腦袋石化術....所以研究題目就依然還是題目,遲遲沒有更進一步的產出......

剛好這一陣子很榮幸有機會參與台大的雲端學程專題,帶著學生們一起研究關於R、Mahout 、Hadoop...等,相關的技術,我覺得這的確是一個教學相長的好機會,台大的學生的確都很優秀,缺少的只是實務經驗以及找題目的方向,剛好對於業界人士來說我們多的是方向(題目)和經驗,但是缺少的卻是研究的時間,以及學理的基初(畢業後都還老師了...囧rz..),所以通常只需要給他們一個研究的方向,以及實務經驗的指導,他們的確都能做的不錯,我覺得靠著這個專題指導的學程確可以達到互補雙贏的效果。 呼應前陣子實習生的議題,如果要找實習生就該讓他們做這種事!而不是做無腦的勞力壓榨 ,像這篇文章就是其中一個學生的產出的:R and Hadoop 整合初體驗

嗯~其實前面的都是一時感觸的題外話,回到正題~ 寫這篇文章是嘗試要記錄這一陣子跟學生開會所學到的東西,之後跟學生討論後,看可不可以陸續把學生的成果整理出來。
 

圖片來源:dataguru


這次給學生的研究方向是嘗試利用R + Hadoop 的方式,實作出Mahout 內建的幾個推薦演算法,因為Mahout 基本上就是提供一堆實作在Hadoop (MapReduce)上的推薦演算法工具,但換個角度來想,對於學術界來說,用R來做資料分析已經是稀鬆平常的事,而且R本身就內建更多的演算法套件,那我們是否可以利用R內建的Algorithm + Hadoop 組合出類似Mahout 的功能呢?這樣一來對於已經習慣使用R的研究人員來說,也許會更加得心應手?

 圖片來源:revolutionanalytics

此外學生也有找到有Open Source的專案也是正在嘗試使用R來實作推薦系統,只不過並沒有使用Hadoop (MapReduce) 的技術,所以我請學生可以參考這個專案嘗試跟RHadoop結合,應該會是個有趣的結合。
  • recommenderlab - Provides a research infrastructure to test and develop recommender algorithms

這次學生的報告內容主要是針對,Mahout 在資料分析上面常常會用到的幾個演算法介紹,我把我的了解整理如下:

分類(Classification) - Naive Bayes classifier


分類演算法的前題是已知的群體內有幾種分類種類(例:男生、女生),然後透過帶著分類特性的Training Data (例:身高,體重,腳的大小),利用矩陣運算出猜測對象是某種物種的機率,舉例來說我們有一千組的Training Data ,分別記錄男生和女生的身高體重和腳的大小,然後輸入一個未知的性別人物的特性(身高,體重,腳的大小),讓系統去猜測他是男生還是女生的機率比較高。而Naive Bayes是這種分類法的入門演算法,進階版可以使用SVM演算法。

分群(Cluster) -K-Mean


分群演算法剛好跟分類演算法相反,分群演算法是在未知的群體內,猜測可以把這些物種分成幾類,所以通常會先搭配圖像化的方式決定可能有幾個分類數,然後再利用此演算法把群體去分類。


推薦(Recommendation)

而推薦系統除了利用上述兩種方式外,現在主流使用的還是Collaborative Filtering (CF)的方式。



 圖片來源:wiki


細分下去又分成以下幾種方式:
  • User-based Recommendation
  • Content-based Recommendation (A.K.A. 個人化推薦) 
  • Item-Based Recommendation
  • Social Filtering Recommendation

當然每個方法都有其優點和缺點,所以到最後幾乎都是會混搭使用,對於實務應用來說我們也許可以不用去了解其複雜的數學運內容 (謎之音:沒出息~Orz..),畢竟Mahout 或是R都已經提供這些套件,我們只要把資料和參數餵進去就好,但是至少要先了解每一個演算法的特性和是用範圍,以及參數的意義,這樣將來才知道在怎樣的場合該使用怎樣的演算法。

更多詳細的說明可以參考以下延伸閱讀:

[1] 推薦系統的分類(2008 Edition)
[2] 基於內容的推薦(Content-based Recommendations)
[3] Readings: Item-Based Collaborative Filtering Recommendation Algorithms
[4] [Data mining] 協同過濾法 (collaborative Filtering) 及相關概念



張貼留言