FP-tree 關聯規則挖掘

來源:互聯網
上載者:User
關鍵字 nbsp; 規則 這個
FP-tree 關聯規則挖掘 博客分類: hadoop mapreducehadoop            去年公司1拆4,再拆3,在拆25,真是72搬變化,看的我等屌絲一陣膽寒,但一年過去了並沒有影響我和同事們的工作,也沒有聽得到一些負面消 息,nice,看來level還查一大大截。 拆25的一個大的結果是前臺流量必然被瓜分,這個應該會很糾結,有點遠,打住。 今年我的技術方向有BI轉向演算法多一點,這也是我個人很甘興趣的,團隊專注于CRM這一塊,現在提的比較多的是CEM,好像你還再提crm就不好意思和人打招呼。 為了提高使用者體驗,所以在做一個使用者行為分析的東東,思路就是採集使用者行為,更好的服務會員,其中一個落地點就是根據會員狀態,行為推測出來電的目的地是哪裡,即什麼問題。 關聯規則的演算法主流的有3個,Apriori,基於劃分的演算法,FP-tree,他們都有自己的側重點,百科位址:HTTP://baike.baidu.com/view/1076817.htm


基本思路都是找出頻繁項集 apriori反覆運算的方式找,效率低,但是思路很清晰,基於規劃是在它基礎上優化了性能,Fp-tree是韓佳偉設計的演算法,只需要掃描2次資料庫,性能有很大提升, 並且最主要的mahout有對應的事項,mahout對於mapreduce支援友好,所以選它了.





一、環境


FP-tree wiki  HTTPs://cwiki.apache.org/confluence/display/MAHOUT/Parallel+Frequent+Pattern+Mining


hadoop 0.20.2+mahout 0.5 +jdk 1.6 不同版本間有不相容情況,這個坑我踩過了,坑和安裝見我之前的文章。 安裝環境過程中遇到好多問題,有些百度就能解決了,有好多需要谷歌看老外的論壇,覺得每次百度搞不定了就用谷歌,最後老外的解釋都挺簡單,但能解決問題,所以強烈建議在搜索之前想一下是否直接看老外的論壇, 感覺國內遇到的問題總是更豐富一下。


二、講演算法前先講一下如何配置eclipse進行debug,


1、eclipse安裝mapreduce外掛程式,網上找一個安裝就行,應該與hadoop版本沒關係


2、這個時候需要配置外掛程式的hadoop資訊了,因為需要與hadoop環境交互,所以需要知道namenode的監聽埠和jobtracker的監聽埠,如果你前面忘記了自己的配置,那查看一下檔。 不同hadoop版本的設定檔也不同,我 的是hadoop0.20.2(這也是個坑)


core-site.xml檔的fs.default.name


mapred-site.xml檔的mapred.job.tracker


這樣就可以在eclipse中run和debug了


二、演算法邏輯


程式主入口是FPGrowthDriver 其實就是一個啟動類,做一些輸入參數解析,比如輸入輸出,根據摻入的參數選擇單機還是分散式運算,由method指定,具體參數看mahout - fp-treewiki頁面(或者你輸入參數不對也會有提示的),我的method指定的mapreduce,如下代碼:


if ("sequential".equalsIgnoreCase(classificationMethod)) { runFPGrowth(params); } else if ("mapreduce". equalsIgnoreCase(classificationMethod)) { Configuration conf = new Configuration(); HadoopUtil.delete(conf, outputDir); PFPGrowth.runPFPGrowth(params);


PFPGrowth.runPFPGrowth主要計算邏輯都在這個方法總,這個方法調用了5個方法,所以計算過程可以分為5個步驟,我詳細講解下具體每一步都做了什麼,之前有參照過另一片博客,頭幾步講的很詳細,而且有圖,但是很多細節並沒有提,博客位址 是:HTTP://www.cnblogs.com/zhangchaoyang/articles/2198946.html


1、Count


startParallelCounting 這部就是個wordcount,對於DB中的每個元素做計數,可以叫做Count,這樣方便記憶和理解,產出的是一個


fList, [(薯片,7), (麵包,7), (雞蛋,7), (牛奶,5), (啤酒,4)]這個後面會用到,所以這些變數名最好都理解並記住。


2、Group


startGroupingItems  fList隨機分N組,每組放maxPerGroup個元素  maxPerGroup=fList.size() / numGroups;


分組後的資料放入gList {薯片=0, 牛奶=3, 雞蛋=2, 麵包=1, 啤酒=4} 數位是組ID


本次沒有用到mapreduce,在本地完成,


fList相當於元素或元素對應編號與組的映射關係


3、code


startTransactionSorting 編號,去重,排序,輸入輸出類似如下,只不過[0, 1, 2]不是陣列,而是一個 TransactionTree,到現在位置邏輯還都很清晰,第四步開始構建樹結構了


牛奶,雞蛋,麵包,薯片 ->> 單分支的樹[0, 1, 2]


4、tree


startParallelFPGrowth


map:讀取第三步輸出的樹,並拆成多顆樹:如把[0, 1, 2] --> [0, 1, 2] [0,1] [0]  輸出K=groupId(fList中2對應的groupId)  V=對應的樹


reducer:第三步中同一個groupid的輸出構建成對應的一棵樹。 然後遍歷表頭項,分別從樹上遞迴找到所有父節點,這樣表頭項中的1個元素會對應多條路徑,然後把這些路徑作為輸入到第三步,反覆運算進行


5、mining


startAggregating 根據第四步的輸出產出top k頻繁模式








ps:時間比較急,今天就搞環境和做ETL了,先寫這些,後續再更新,發現還是沒有我參照的博客寫的詳細,人家還有圖呢,後續也會做個圖,再把我代碼中的一些注釋抽取出來,會更清晰一些,方便來看的人,執行力,執行力啊, 圖會有的。 收工,回家...... 2013-03-30
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.