天天看點

mahout運作測試與資料挖掘算法之聚類分析(一)kmeans算法解析

版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/qq1010885678/article/details/44984327

在使用mahout之前要安裝并啟動hadoop叢集

将mahout的包上傳至linux中并解壓即可

mahout下載下傳位址:

點選打開連結

mahout中的算法大緻可以分為三大類:

聚類,協同過濾和分類

其中

常用聚類算法有:canopy聚類,k均值算法(kmeans),模糊k均值,層次聚類,LDA聚類等

常用分類算法有:貝葉斯,邏輯回歸,支援向量機,感覺器,神經網絡等

下面将運作mahout中自帶的example例子jar包來檢視mahou是否能正确運作

練習資料下載下傳位址:

上面的練習資料是用來檢測kmeans聚類算法的資料

使用hadoop指令運作mahout的例子程式(確定hadoop叢集已開啟)

在例子代碼中寫死了輸入的路徑是/user/hadoop/testdata

将練習資料上傳到hdfs中對應的testdata目錄下即可

寫死的輸出路徑是/user/hadoop/output

執行指令:

hadoop jar ~/mahout/mahout-examples-0.9-job.jar org.apache.mahout.clustering.syntheticcontrol.kmeans.Job

開始執行任務

由于聚類算法是一種疊代的過程(之後會講解)

所欲他會一直重複的執行mr任務到符合要求(這其中的過程可能有點久。。。)

運作結果如下:

mahout無異常

執行完這個kmeans算法之後産生的檔案按普通方式是檢視不了的,看到的隻是一堆莫名其妙的資料

需要用mahout的seqdumper指令來下載下傳到本地linux上才能檢視正常結果

檢視聚類分析的結果:

./mahout seqdumper -s /user/hadoop/output/data/part-m-0000 /home/hadoop/res

之後使用cat指令即可檢視

cat res | more

現在來說說什麼是kmeans聚類算法

所謂聚類算法就是将一份資料,按照我們想要的或者這份資料中的規律來将資料分類的算法

例如:

現有一份雜亂的樣本資料,我們希望資料最後按照某些類别來劃分(紅豆分為紅豆,綠豆分為綠豆等意思)

聚類算法會從n個類的初始中心開始(如果沒有人為設定,其會按照随機的初始中心開始)

什麼意思呢?來看一張圖

上圖中,左一的圓圈表示原始資料在随機的初始中心劃分後的的分布

但是可以看出很明顯cluster1中有很多是靠近cluster2的資料點

是以kmeans會根據規則再次計算出更加合适的中心點來進行劃分

這個規則就是:

計算每個資料點,到原始中心cluster1和cluster2的距離

離誰比較近就劃分到誰那邊去(形如中間的圓圈)

然後将cluster1和cluster2中的資料分别求平均值,得到的兩個平均值成為新的cluster1和cluster2中心點

但是很明顯這樣劃分還是不夠合理

是以kmeans會繼續疊代計算每個資料到新的中心點的距離

離誰比較近就劃分給誰

然後在分别求平均值得到新的中心點

直到cluster1和cluster2中的資料平均值不在發生變化時認為此時是最理想的劃分方式(也可以進行人工的幹預)

該算法的最大優勢在于簡介快速。算法的關鍵在于初始中心的選擇和計算距離的公式

最後在調用一個mahout的一個算法來測試mahout

調用fpg算法(實作計數頻繁項集的算法)

測試資料下載下傳(電商購物車資料)

在mahout的bin目錄下

./mahout fpg -i /user/hadoop/testdata/tail.txt -o /user/hadoop/output -method mapreduce -s 1000 -regex '[]'

各個參數的意義:

-i:指定輸入資料的路徑

-o:指定輸出結果的路徑

-method:指定使用mapreduce方法

-s:最小支援度

-regex:使用指定的正則來比對過濾資料

同樣的,運作結果的資料要通過seqdumper來檢視

繼續閱讀