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


一、Mahout是什么?

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

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

 

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

 

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

 

二、安裝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的朋友可以跳過本小節。

 

下面是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確認已安裝的插件。

 

四、使用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包。

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

 

 五、編寫代碼,運行程序

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM