Hadoop實戰之路——第六章 數據挖掘利器Mahout

6.1 初識Mahout

Apache Mahout是Apache基金支持的頂級項目,其目標在於建立可伸縮的用於機器學習算法庫。現在,Mahout支持數據挖掘的三個領域:

(1)Recommendation mining,推薦引擎(協同過濾);(2)Clustering,聚類;     (3)Classification,分類。

目前,Apache發佈的最新版本是0.9,它主要支持:User and Item based recommenders、Matrix factorization based recommenders、K-Means, Fuzzy K-Means clustering、Latent Dirichlet Allocation(集合概率模型)、Singular Value Decomposition(奇異值分解)、Logistic regression classifier(邏輯迴歸分類器)、Naive Bayes classifier(貝葉斯分類)、Random forest classifier(隨機森林分類器)、High performance java collections、A vibrant community。

6.2 Mahout的安裝與配置

6.2.1Mahout的安裝

Apache提供了兩種類型的Mahout安裝文件,一種是bin(二進制)類型,另一種是src(源碼)類型。前者安裝較易,後者需要進行編譯,並且須先安裝Maven。下面在Hadoop集羣(操作系統爲CentOS6.4)中介紹這兩種安裝方法:

(1)bin(二進制)類型安裝

step1:下載Mmahout tar文件

Mahout bin(二進制)下載地址:http://archive.apache.org/dist/mahout/0.8/mahout-distribution-0.8.tar.gz,本教程中下載的是0.8版本 。

命令:wget http://archive.apache.org/dist/mahout/0.8/mahout-distribution-0.8.tar.gz

step2:解壓Mmahout tar文件

命令: tar -zxvf mahout-distribution-0.8.tar.gz -C $MAHOUT_HOME/

$MAHOUT_HOME代表的是安裝Mahout的目標路徑。

(2)src(源碼)類型安裝

教程中主要使用Maven3.0,所以系統需要先有JAVA1.6以上版本的支持。

命令:java -version 

安裝Maven2

step1:下載mave3。從http://maven.apache.org/download.cgi,下載apache-maven-3.2.2-bin.tar.gz

命令:wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.2.2/binaries/apache-maven-3.2.2-bin.tar.gz

step2:解壓下載的文件。

命令:tar -zxvf apache-maven-3.2.2-bin.tar.gz

step3:配置maven

配置profile,命令:vi /etc/profile

加入以下內容:

export M2_HOME=/usr/local/maven3

export PATH=$PATH:$M2_HOME/bin

執行命令source /etc/profile使profile生效。

配置mvn,主要是修改Java的內存大小,命令:vi $M2_HOME/bin/mvn

在exec "$JAVACMD"\後面加上:

-Xmx256m \


step4:驗證

命令:mvn -v

出現如下圖所示界面表示安裝成功。

安裝Mahout

step1:先檢查安裝svn,命令:yum install svn

step2:下載Mahout src類型文件,用svn庫下載當前Mahout最新版本.

命令:svn co http://svn.apache.org/repos/asf/mahout/trunk/

 step3:使用maven安裝Mahout,進入下載的trunk目錄運行命令:mvn install,系統自動編譯core和example目錄,這個過程要執行testing部分,故將花費大量的時間,出現下圖所示的界面表示安裝成功。如果想在短時間內完成,可運行命令:mvn -DskipTests install


6.2.2 Mahout的配置

配置profile文件,便於操作mahout時不需要全路徑。

命令:vi /etc/profile

加入下面的環境變量:

export HADOOP_CONF_DIR=$HADOOP_HOME/conf

export MAHOUT_HOME=/usr/local/trunk

export MAHOUT_CONF_DIR=$MAHOUT_HOME/conf

export PATH=$MAHOUT_HOME/conf:$MAHOUT_HOME/bin:$PATH

使用命令:source /etc/profile,使配置生效。

6.2.3 驗證Mahout是否安裝成功

命令:bin/mahout -help

安裝成功後,此命令將顯示mahout實現的所有算法命令,如下圖所示。


6.3 關聯規則挖掘

數據挖掘過程是從海量數據中發現未知的、用戶感興趣的、有潛在價值的知識和規則的過程,可以與用戶或者知識庫之間進行交互,把用戶感興趣的模式提供給用戶,或者將其作爲新的知識、規則加入知識庫中。目前,數據挖掘的應用十分廣泛。概括來說,數據挖掘的任務主要有估計(estimation)、分類(classification)、預測(prediction)、關聯規則(association rule)、聚類(clustering)。

6.3.1 關聯規則概述

關聯規則挖掘用於尋找給定數據集中數據項之間的有趣的關聯或相關關係,關聯規則提示了數據項間的未知的依賴關係,根據所挖掘的關聯關係,可以從一個數據對象的信息來推斷另一個數據對象的信息,其中較爲經典的案例是發生在沃爾瑪超市的“啤酒與尿布“。

定義6.1 關聯規則挖掘的數據集如果記爲D(即事務數據庫),即D={t1,t2,…,tk,…,tn},tk={i1,i2,…,im,…,ip}, tk稱爲事務(Transaction), im稱爲項(Item)。

定義6.2 項集(Itemset):設I={i1,i2,…,im}是D中全體項組成的集合,I的任何子集X稱爲D的項集。|X|=k稱爲集合X爲k項集(K-Itemset)。

定義6.3 TID:事務的惟一標識。

定義6.4 項集支持數(Item count):數據集D中所包含的全部項集X的事務數,即:

定義6.5 項集支持度(Item support):項集在事務數據庫D中所出現的概率,即:

定義6.6 頻繁項集:事先給定一個最小支持數(minsup),如果項集X的支持數大於等於這個最小支持數,那麼X稱爲大項集或頻繁項集。

定義6.7 關聯規則(Association rule):若X、Y爲項集,且,蘊含式X->Y稱爲關聯規則,X、Y分別稱爲關聯規則X->Y的前提和結論。

也就是說,對於已經給定的支持閾值和置信閾值,如果規則的置信度和支持度都大於相應閾值,那麼這樣的規則就稱爲關聯規則。

一般來說,關聯規則挖掘分爲以下兩個步驟進行:

步驟一:首先找出所有支持數大於等於指定的最小支持數的項集,即搜索大項集;

步驟二:利用已經找到的大項集進一步產生關聯規則。

目前大多數研究都集中在頻繁項集的挖掘上,尋找頻繁項集的問題可以歸納爲尋找含有給定置信度的規則,研究者們已經提出了許多這方面的發現算法,其中,較爲經典的有Apriori算法、FPGrowth算法、AGM算法、PrefixSpan算法等。

6.3.2 Mahout實現的關聯規則算法——FPGrowth

6.3.2.1 FPGrowth算法

在1993年Agrawal等人首次提出了挖掘顧客交易數據庫中項集之間的關聯規則的問題,提出了AIS算法和SETM算法,1994年又提出了改進的算法Apriori算法和AprioriTid算法[27][28][29],AIS算法與SET算法都是在遍歷交易數據庫期間不斷產生候選項集,這種方法的顯著特點就是會導致許多不必要的數據項集的生成和計數,而Apriori和AprioriTid算法只利用前次過程中生成的大項集來生成新的候選項集, AprioriTid算法在第一次遍歷後完全不用交易數據庫來計算候選集的支持數,而是使用了在前一次過程中所使用的候選項集來生成Tid表來代替原來的交易數據庫,顯然新生成的Tid表比原來的交易數據庫小得多,這樣就減少了許多不必要的I/O讀取,提高了算法的效率。但是Apriori算法在挖掘額長頻繁模式的時候性能往往低下,Jiawei Han提出了FPGrowth算法,它是基於頻繁模式樹的挖掘算法。

頻繁模式樹(Frequent Pattern Tree):將事務數據表中的各個事務數據項按照支持度排序後,把每個事務中的數據項按降序依次插入到一棵以 NULL爲根結點的樹中,同時在每個結點處記錄該結點出現的支持度,如下圖所示。

條件模式基:包含FP-Tree中與後綴模式一起出現的前綴路徑的集合

條件樹:將條件模式基按照FP-Tree的構造原則形成的一個新的FP-Tree

FPGrowth算法的基本思想:不斷地迭代FP-tree的構造和投影過程。

step1 對於每個頻繁項,構造它的條件投影數據庫和投影FP-tree。

step2 對每個新構建的FP-tree重複這個過程,直到構造的新FP-tree爲空,或者只包含一條路徑。

step3 當構造的FP-tree爲空時,其前綴即爲頻繁模式;當只包含一條路徑時,通過枚舉所有可能組合並與此樹的前綴連接即可得到頻繁模式。

6.3.2.2 Mahout使用FPGrowth算法進行頻繁模式挖掘

Mahout已經實現了FPGrowth算法,使用時只需通過調用API中的mahout fpg命令便可完成頻繁模式挖掘。用命令:mahut fpg -h,列出其參數。下面介紹幾個常用的參數:

  • --input(-i):數據輸入路徑
  • --output(-o):數據輸出路徑
  • --minSupport(-s):最小支持數,缺省爲3
  • --splitterPattern(-regex):挖掘中以數據行爲單位,一行中可通過此參數設置數據項之間的分隔符,缺省爲[,\t]*[,|\t][\t][,\t]*
  • --method(-method):運行模式,可選sequential或mapreduce
  • --encoding(-c):文本編碼格式,缺省爲UTF-8

例1 使用Mahout進行頻繁模式挖掘

數據準備

實驗數據來源於IBM公司Almaden研究中心開發的QUEST系統,下載網址:http://fimi.ua.ac.be/data/,每行數據中的數據項間用空格隔開。

運行Mahout fpg挖掘算法

1.sequential模式

設置本地運行命令:export MAHOUT_LOCAL=true

命令:

mahout fpg \
    >-i T10I4D100K.dat \
    >-o result \
    >-k 50 \
    >-method sequential \
    >-regex '[\ ]' \
    >-s 3 

算法執行結束後,出現如下界面表示成功。

2.mapreduce模式

首先,需要將下載的數據文件上傳至Hadoop集羣上,並保證集羣已經正常工作。

上傳命令:hadoop dfs -put /usr/local/T10I4D100K.dat /user/root/testdata/

運行mahout命令:

mahout fpg \
    >-i hdfs://master204:54310/user/root/testdata/T10I4D100K.dat \
    >-o hdfs://master204:54310/user/root/result \
    >-k 50 \
    >-method mapreduce \
    >-regex '[\ ]' \
    >-s 3 

算法執行結束後,出現如下界面表示成功。

從圖中可以看出,使用sequential方法執行的時間遠遠高於mapredue。

查看計算結果

Mahout的fpg算法成功運行後,計算機結果集以SequenceFile的形式存放於frequentpatterns的文件目錄下,需要查看時運行命令:

mahout seqdumper \
    >-i hdfs://master204:54310/user/root/result/frequentpatterns/part-r-00000 \
    >-c 

其中,-c參數指統計結果記錄的個數。seqdumper的參數如下圖:

結果如下圖:

分析計算結果

mahout seqdumper \
    >-i hdfs://master204:54310/user/root/result/frequentpatterns/part-r-00000 \
    >-q 

局部如下圖:

從上圖可以看出,7階大項集{88,255,571,702,589,890,956}的支持數爲20,6階大項集{88,294,350,381,603,682}的持數爲6,可根據實際情況應用於相關領域。

發佈了37 篇原創文章 · 獲贊 14 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章