零基礎學習Mahout之一:搭建單機環境

1、Mahout是什麼?

Mahout是Apache的一個開源項目(http://mahout.apache.org/),提供了機器學習領域的若干經典算法,以便開發人員快速構建機器學習和數據挖掘方面的應用。html

Mahout是基於Hadoop的。從名稱上看也頗有意思,Hadoop是一個大象的名字,而Mahout則是象夫、看象人,可見兩者聯繫之緊密。(這讓我天然聯想到Sun和Eclipse...)java

 

我此時是一個徹底沒用過Mahout的門外漢,對Hadoop也沒有實際使用經驗,算是真正的零基礎。個人目標是但願以最簡單的方式搭建起一個Mahout的開發環境,以最快的速度讓Mahout工做起來,以方便後續的進一步學習。算法

 

因而,通過一番折騰,便有了本文。本文記錄了Windows下Eclipse+Maven+Mahout單機環境的搭建過程。我不知道這是否是最簡單的Mahout開發環境,但它應該算得上是比較簡單的。apache

 

2、安裝Eclipse

這個沒啥說的,再怎麼零基礎,也要會用Eclipse吧。eclipse

Eclipse的下載地址爲:http://www.eclipse.org/downloads/,選擇標準版就行。機器學習

安裝完後運行Eclipse,爲後續的安裝作好準備。maven

 

3、安裝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確認已安裝的插件。

 

4、使用Maven構建Mahout項目

運行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包。

到此,咱們的環境就已搭建完畢,接下來即是編寫代碼。

 

 5、編寫代碼,運行程序

雙擊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

相關文章
相關標籤/搜索