2013/12/04

Book: Mahout in Action

      因為目前公司有個重要專案(BonRack), 需要用到推薦系統, 研究了一下這個open source系統, 其實原本想法是想要利用機器學習來做, 因為OpenCV 摸了一陣子, 第一個想到的是用OpenCV 裡的Machine Learning API, 來搭建系統, 後來不經意的透過同學和學長介紹, 了解Apache有個機器學習專案, 安裝了來用, 再依照本書來實作, 以下大概解說概要, 實際內容請閱讀此書.

       第一篇, 主要解說推薦系統, 這是目前需多網站會使用的功能, 主要分為User-based與Item-based, 分別也有不同的分析方法, 也都有詳盡的解說與範例說明.
這2個方法的差別在於分析的途徑, User-based會依據使用者之間的相似性來判別相同的興趣.而item-based是依據物品的相關性來做推薦.
      此篇後面也針對資料量龐大時, 如何使用Apache Hadoop利用MapReduce方法來做分散式運算, 也解釋如何將演算部分拆成Map/Reduce可使用的輸入資料, 基本方式就是利用矩陣相乘時, 每個row和column之間運算過程並不會與其他row和column有相關, 只需回傳自己row與column相乘結果即可.

      第二篇clustering, 就是分群, 將相似物件歸為群集, Mahout實作的演算法有k-means, fuzzy k-means, canopy, Dirichlet 和 LDA, 那如何定義相似? 
      Mahout提供幾個方法, 簡單的解釋就是距離, 可以依照實際需求採用不同的距離計算方法. 這幾個實作的演算發都有分為單機版與MapReduce版, 可以簡單的切換不同運算需求, 此篇也有提到其他的演算法, 但是因為無法拆成MapReduce形式, 就沒有實作出來.
      Mahout也提供了一些tool class, 可以幫忙分析使用不同方法算出的結果, 可用來調整最佳算法與參數. 篇末提供了3個使用真實世界資料用clustering分析的例子, 
1.twitter:透過使用者tweet的文字, 來將使用者分群.
2.Last.fm:網路音樂電台, 透過用戶將音樂標籤, 可以建議音樂或作者類似標籤.
3.Stack Overflow:透過問題與答案, 和相關的回答者與得分, 來分辨是否有相關的問題與答案. 


      第三篇Classification, 字面翻譯是分類, 感覺上很像clustering, 但是區別在於, clustering是透過演算本身將資料分群. 而Classification比較像是預測分析, 需要經過一個訓練過程, 找出一個最佳解, 像是垃圾郵件分類器就是這一類演算法.
      典型的classification分為3大步驟:
1.定義目標值, 收集訓練資料, 定義預測值, 選擇演算法, 開始訓練並產生model.
2.使用測試資料測試model, 檢測結果, 並調整訓練參數, 演算法等.
3.開始使用未知資料, 進行運作. 這部分可以用的演算法有: stochastic gradient descent (SGD), Support Vector Machine(SVM), naive Bayes, complementary naive Bayes, Random forests.
      Mahout提供了評估訓練結果的API, 可以在訓練過程中做即時評估, 可用來做調整訓練參數或更換演算法的依據. 對於機器學習有興趣的人一定要去看看這個Stanford機器學習公開課程CS229 這是有中文字幕版本, 還有很重要的講義一定要看.

No comments:

Post a Comment