Mahout是Apache的一個開源項目(http://mahout.apache.org/),提供了機器學習領域的若干經典算法,以便開發人員快速構建機器學習和數據挖掘方面的應用。html
Mahout是基於Hadoop的。從名稱上看也頗有意思,Hadoop是一個大象的名字,而Mahout則是象夫、看象人,可見兩者聯繫之緊密。(這讓我天然聯想到Sun和Eclipse...)java
我此時是一個徹底沒用過Mahout的門外漢,對Hadoop也沒有實際使用經驗,算是真正的零基礎。個人目標是但願以最簡單的方式搭建起一個Mahout的開發環境,以最快的速度讓Mahout工做起來,以方便後續的進一步學習。算法
因而,通過一番折騰,便有了本文。本文記錄了Windows下Eclipse+Maven+Mahout單機環境的搭建過程。我不知道這是否是最簡單的Mahout開發環境,但它應該算得上是比較簡單的。apache
這個沒啥說的,再怎麼零基礎,也要會用Eclipse吧。eclipse
Eclipse的下載地址爲:http://www.eclipse.org/downloads/,選擇標準版就行。機器學習
安裝完後運行Eclipse,爲後續的安裝作好準備。maven
Maven又是什麼?這裏只須要知道它是一個項目管理工具就行,有了它,能夠很是方面的安裝Mahout和相關依賴組件。工具
Maven的官方網站爲:http://maven.apache.org/,它是一個命令行工具,這裏咱們安裝的是它的Eclipse插件版本(m2eclipse),其地址爲:http://www.eclipse.org/m2e/,已安裝Maven的朋友能夠跳過本小節。oop
下面是m2eclipse的安裝方法。學習
進入的下載頁面:http://www.eclipse.org/m2e/download/
安裝m2eclipse方法有兩種,一種是在上面的Install圖標上按下鼠標,而後拖動到Eclipse的窗口(看哪裏可以釋放鼠標就拖到哪裏,好比標題欄),稍後就會彈出以下對話框,點擊「Confirm」便可。
第二種方法是經過Eclipse幫助菜單下的安裝新軟件(Install New Software)安裝:
點了上面菜單後,會彈出以下對話框,點擊Add按鈕,而後輸入Name和Location(http://download.eclipse.org/technology/m2e/releases),Location是從前面的網頁裏面複製而來。
肯定後,會顯示以下內容,選擇全部項目,而後點擊Next
贊成受權,點擊Finish,Maven插件就會自動被安裝。
安裝完畢後,可經過Help > About > Installation Details確認已安裝的插件。
運行Eclipse,經過菜單File > New > Project新建項目,選擇Maven Project
直接Next
選擇maven-archetype-quickstart
輸入GroupId和ArtifactId,能夠根據本身喜愛隨便命名:
點了Finish後,Eclipse便會建立以下一個工程:
雙擊pom.xml,在右邊的面板中選擇Dependencies,點擊Add,在彈出的對話框中輸入mahout,Maven便會搜索相關包,選擇mahout-core,肯定。
而後按Ctrl+S保存 pom.xml,maven便會下載相關jar包,在項目的Dependencies目錄下能夠看到這些jar包。
到此,咱們的環境就已搭建完畢,接下來即是編寫代碼。
雙擊App.java,對其進行編輯。
做爲初次嘗試,確定要選比較簡單的算法,這裏我採用的是基於用戶的協同過濾算法來計算推薦商品。完整代碼以下:
1 package com.mine.mahout.practice; 2 3 import java.io.File; 4 import java.util.List; 5 6 import org.apache.mahout.cf.taste.impl.model.file.FileDataModel; 7 import org.apache.mahout.cf.taste.impl.neighborhood.NearestNUserNeighborhood; 8 import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender; 9 import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity; 10 import org.apache.mahout.cf.taste.model.DataModel; 11 import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood; 12 import org.apache.mahout.cf.taste.recommender.RecommendedItem; 13 import org.apache.mahout.cf.taste.recommender.Recommender; 14 import org.apache.mahout.cf.taste.similarity.UserSimilarity; 15 16 17 public class App 18 { 19 public static void main( String[] args ) 20 { 21 try { 22 // 從文件加載數據 23 DataModel model = new FileDataModel(new File("e:\\data.csv")); 24 // 指定用戶類似度計算方法,這裏採用皮爾森相關度 25 UserSimilarity similarity = new PearsonCorrelationSimilarity(model); 26 // 指定用戶鄰居數量,這裏爲2 27 UserNeighborhood neighborhood = new NearestNUserNeighborhood(2, similarity, model); 28 // 構建基於用戶的推薦系統 29 Recommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity); 30 // 獲得指定用戶的推薦結果,這裏是獲得用戶1的兩個推薦 31 List<RecommendedItem> recommendations = recommender.recommend(1, 2); 32 // 打印推薦結果 33 for (RecommendedItem recommendation : recommendations) { 34 System.out.println(recommendation); 35 } 36 } catch (Exception e) { 37 System.out.println(e); 38 } 39 } 40 }
上面的e:\data.csv爲數據文件,數據的第一列爲用戶ID,第二列爲商品ID,第三列爲用戶對商品的評分:
1,101,5 1,102,3 1,103,2.5 2,101,2 2,102,2.5 2,103,5 2,104,2 3,101,2.5 3,104,4 3,105,4.5 3,107,5 4,101,5 4,103,3 4,104,4.5 4,106,4 5,101,4 5,102,3 5,103,2 5,104,4 5,105,3.5 5,106,4
(備註:上面的代碼和測試數據均參考自這篇博文:http://blog.csdn.net/aidayei/article/details/6626699)
接下來就能夠運行程序了,選擇Java Application:
選擇App,或者前面直接對App.java執行運行,而不用對整個項目執行運行。
最後獲得輸出結果以下:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. RecommendedItem[item:104, value:4.257081] RecommendedItem[item:106, value:4.0]
能夠看到,Mahout爲用戶1提供了兩個推薦商品,分別是104和106。
這樣,咱們便完成了第一個Mahout程序,整個過程還算簡單吧?但願對「零基礎」的朋友有所幫助。
補充:前面的運行結果顯示三行紅字,說是slf4j裏面的StaticLoggerBinder加載失敗,雖然說它不影響程序運行結果,但看着實在煩人,解決辦法是再次編輯pom.xml的dependencies,添加一個slf4j-nop包便可。
(本文已移至我的網站freefalcon.cn)