fp樹的並行的大概演算法就是把資料分小(並不是簡單的分,分完後可以保證沒有丟失頻繁項),然後再使用每份小資料進行建樹、挖掘樹。那麼mahout的fpgrowthdriver是如何分資料呢?其實前面也大概說了下,只是不是很特別的說明,在這裡舉例來說明:
比如如下的f-list: [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14] ,
事務集如下:
[0,1,2,4,7,8,9,10,11,12]
[1,4,5]
[1,5,10,13]
[5,14]
[5,6,7]
假設根據f-list和上面的事務集建立的fp-tree比較大,放入不了記憶體,那麼可以考慮把資料分為兩組,那麼按照mahout的做法是g-list分別如下:
[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]和 [0,1,2,3,4,5,6,7]
其相應的事務集分別對應如下:
[0,1,2,4,7,8,9,10,11,12]
[1,5,10,13]
[5,14]
和
[0,1,2,4,7]
[1,4,5]
[1,5]
[5][5,6,7]
這樣一來,建立了兩個fp-tree,並且這兩個fp-tree都比原來的那個要小,可以完全放入記憶體了。(不過這樣挖掘出來的頻繁項不會丟失,但是會有重複,)。
最後貼上mahout裡面分資料的**:
string items = splitter.split(input.tostring());
openinthashset itemset = new openinthashset();
for (string item : items)
}intarraylist itemarr = new intarraylist(itemset.size());
itemset.keys(itemarr);
itemarr.sort();
openinthashset groups = new openinthashset();
for (int j = itemarr.size() - 1; j >= 0; j--)
groups.add(groupid);
}
分享,快樂,成長
MAHOUT之關聯規則挖掘演算法
目前正在對hive表中的資料做分析,期望從已有的資料中挖掘出類似購物籃的關聯規則,但是單機環境下的關聯規則演算法實在是無法勝任大資料環境下的資料探勘工作,無奈尋求大資料環境下的分布式挖掘演算法,目前可供選用的關聯規則挖掘演算法有apriori和fp tree兩種,前者較後者來說,當挖掘過萬的記錄時,...
Mahout原始碼目錄說明
mahout專案是由多個子專案組成的,各子專案分別位於原始碼的不同目錄下,下面對mahout的組成進行介紹 1 mahout core 核心程式模組,位於 core目錄下 2 mahout math 在核心程式中使用的一些資料通用計算模組,位於 math目錄下 3 mahout utils 在核心程...
Mahout原始碼目錄說明
mahout專案是由多個子專案組成的,各子專案分別位於原始碼的不同目錄下,下面對mahout的組成進行介紹 1 mahout core 核心程式模組,位於 core目錄下 2 mahout math 在核心程式中使用的一些資料通用計算模組,位於 math目錄下 3 mahout utils 在核心程...