欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種應用于游戲道具推薦的頻繁項集挖掘方法與流程

文檔序號:12596434閱讀:297來源:國知局
一種應用于游戲道具推薦的頻繁項集挖掘方法與流程

本發(fā)明屬于數(shù)據(jù)挖掘領域,更具體地,涉及一種頻繁項集挖掘方法。



背景技術:

數(shù)據(jù)挖掘技術自誕生以來就致力于發(fā)現(xiàn)隱藏在數(shù)據(jù)中有價值的信息,數(shù)據(jù)挖掘有六種模式:分類模式、聚類模式、回歸模式、關聯(lián)模式、序列模式和偏差模式。其中關聯(lián)模式分析是其重要研究的方向。而頻繁項集挖掘是關聯(lián)規(guī)則挖掘算法的重要組成部分。通過頻繁項集挖掘算法能夠在大數(shù)據(jù)中找出有用的規(guī)則,這種方法可以應用于很多領域,如網(wǎng)頁日志挖掘、商業(yè)銷售方面、金融業(yè)方面針對不同類型客戶群體推薦他們可能感興趣的金融業(yè)務以及游戲應用道具推薦等等。然而,在大數(shù)據(jù)的背景下傳統(tǒng)的單機挖掘方式已經(jīng)無法滿足人們的需求,單純的通過提高CPU運算速度以及內(nèi)存容量的方法不僅造價過高,也不現(xiàn)實,硬件的發(fā)展遠遠趕不上人們對運算速度的需求,這時并行化的運算模式顯得尤為重要,通過改進或創(chuàng)新數(shù)據(jù)挖掘算法,并與分布式運算模式相結(jié)合是當前一個很好的可選方案。

隨著網(wǎng)絡信息時代的到來,網(wǎng)絡游戲產(chǎn)業(yè)應運而生。網(wǎng)絡游戲是文化、藝術與高科技的融合,它給我們提供了一種新的休閑娛樂方式。與此同時,網(wǎng)絡游戲產(chǎn)業(yè)蓬勃發(fā)展,市場進一步擴大,網(wǎng)絡游戲逐漸成為網(wǎng)絡經(jīng)濟的領頭羊。當游戲的選擇越來越多,玩家的眼光越來越挑剔,只有適合玩家的游戲才能在市場上經(jīng)久不衰。數(shù)據(jù)挖掘已經(jīng)引起了游戲行業(yè)的極大關注,其主要原因是存在大量數(shù)據(jù),可以廣泛使用,并且迫切需要將這些數(shù)據(jù)轉(zhuǎn)換成有用的信息和知識。以此來改善游戲品質(zhì),提高運營效率,為游戲運營商贏取更多用戶。數(shù)據(jù)挖掘已經(jīng)在各個行業(yè)得以充分運用,但網(wǎng)絡游戲這塊市場并沒有充分開發(fā)完全。同時行之有效的處理游戲數(shù)據(jù)的方法還尚未明朗。

現(xiàn)有的頻繁項集挖掘算法主要擁有以下幾個缺點:

1)算法效率過低,無法再有限時間里面得到挖掘結(jié)果;

2)并行算法無法均衡的劃分負載。



技術實現(xiàn)要素:

針對現(xiàn)有技術的缺陷或迫切技術需求,本發(fā)明公開了一種在MapReduce平臺上并行的頻繁項集挖掘方法,依據(jù)負載預測合理劃分數(shù)據(jù),保證負載均衡;通過優(yōu)化遞歸挖掘流程,大大減少密集型數(shù)據(jù)挖掘時間,解決了算法效率低、負載不均衡的問題。

為實現(xiàn)上述目的,本發(fā)明有以下步驟:

一種頻繁項集挖掘方法,包括以下步驟:

(1)通過Mapreduce統(tǒng)計原始數(shù)據(jù)中各項的出現(xiàn)次數(shù);

(2)依據(jù)各項出現(xiàn)次數(shù)篩選出頻繁一項,將頻繁一項按照出現(xiàn)次數(shù)由高到低排序構(gòu)成F-List;

(3)按照負載均衡原則對F-List中的各項分組,得到包含項和其所屬組號信息的G-List;

(4)Mapper對原始數(shù)據(jù)進行分配:

(4-1)對每條原始數(shù)據(jù)的各項按照F-List中項順序進行重新排序;

(4-2)從每條原始數(shù)據(jù)的最后一項開始讀取項item,在G-List中查找item的組號gid,然后以gid作為鍵key,將數(shù)據(jù)中排在item前面的所有項作為值value構(gòu)成鍵值對<key=gid,value=items>,作為Mapper輸出的鍵值對,若組號gid已出現(xiàn)過,則忽略,繼續(xù)取前一項進行相同操作,直到一條數(shù)據(jù)處理完畢;

(5)Reducer對Mapper輸出的鍵值對進行頻繁項集挖掘:

(5-1)根據(jù)Mapper輸出的key=gid,將value=items分配給相應的reducer,reducer構(gòu)建PPCtree;PPCtree為樹狀結(jié)構(gòu),每個節(jié)點包含五個屬性值:名字、支持度frequency、子節(jié)點、前序遍歷序號pre和后序遍歷序號post;

(5-2)對于PPC-tree中每個節(jié)點Ni,將<Ni.pre,Ni.post,Ni.frequency>命名為PP-code,將各PP-code按照pre的升序排序,構(gòu)建得到F-List中每個頻繁一項的N-List;

(5-3)構(gòu)建Reducer的G-Subsume:G-Subsume(A)={A,B∈I1,其中,A和B表示兩個不同的頻繁一項,A.gid表示項A的組號,Reducer.gid表示Reducer對應的組號,g(X)表示包含頻繁一項X的數(shù)據(jù)ID的集合,X=A或B,I1表示頻繁一項的集合;

(5-4)遞歸挖掘,其子步驟如下:

a)以F-List作為第一輪的遞歸初始數(shù)據(jù),在F-List中取最后一項L,將最后一項L與其G-Subsume(L)結(jié)合,生成頻繁二項集,寫入結(jié)果數(shù)組Result;

b)在遞歸初始數(shù)據(jù)中從前往后逐一取項X,將其N-List即NX的PP-code與L的N-List即NLast的PP-code進行比較,若X存在于G-Susbume(L)中,則繼續(xù)取后一項,否則:當NX的PP-code的pre小于NLast的PP-code,且NX的PP-code的post大于NLast的PP-code的post,則生成頻繁二項集XL,將<NX.PP-code.pre,NX.PP-code.post,NLast.PP-code.frequency>加入頻繁二項集XL的N-List即NXL,且NLast的PP-code后移;當NX的PP-code的pre小于NLast的PP-code,且NX的PP-code的post小于NLast的PP-code的post,則NX的PP-code后移;當NX的PP-code的pre大于NLast的PP-code,則NLast的PP-code后移,直到NLast和NX的PP-code都遍歷完畢;

NX的PP-code遍歷完畢后,若最后結(jié)果XL的N-List的PP-code的支持度之和不滿足閾值,則刪除XL,若滿足則XL為頻繁二項集;

c)繼續(xù)從遞歸初始數(shù)據(jù)中取下一項,重復步驟b),直至遞歸初始數(shù)據(jù)中最后一項L之前的所有項比較完畢,即得到了以最后一項L為后綴的頻繁二項集及其N-List,寫入結(jié)果數(shù)組Result并將其N-List作為頻繁三項集挖掘的初始數(shù)據(jù),該頻繁二項集直接與G-Subsume(L)合并得到以L為后綴的部分頻繁三項集,加入數(shù)組Result;

d)在遞歸初始數(shù)據(jù)中取倒數(shù)第二項,重復上述步驟a)、b)、c),直至遞歸初始數(shù)據(jù)中所有項操作完畢,即得到了所有的頻繁二項集和部分頻繁三項集;

e)提取僅前綴不一樣的頻繁二項集作為第二輪的遞歸初始數(shù)據(jù),從最后一項開始,按照與步驟b)-d)的相同方式處理,得到所有的頻繁三項集,并將頻繁三項集中后綴有G-Subsume的項與其G-Subsume結(jié)合得到頻繁四項集;

f)以此類推,直到最后通過N-List比較得到唯一的頻繁K項集,遞歸結(jié)束;

(5-5)Reducer輸出<key=item∈gid,value=Result>,至此完成所有的頻繁項集挖掘過程。

進一步的,所述步驟(1)的具體實現(xiàn)步驟為:

(1-1)對原始數(shù)據(jù)庫進行水平分片處理,分片得到的每一個子文件叫做Block塊,Block塊被分配到集群中的節(jié)點上;

(1-2)Block塊作為每個Map函數(shù)的輸入數(shù)據(jù),對于Block塊中的一條數(shù)據(jù)Ti中的每一個項aj,Mapper的輸出鍵值對<key=aj,value=1>;

(1-3)所有key=aj的鍵值對將被分配到同一個Reducer,則Reducer的輸入是<key=aj,value={1,1,...,1}>,Reducer進行一次求和輸出<key=aj,value=sum{1,1,...,1}>。

進一步的,所述步驟(3)中負載均衡原則為:將F-list中各項的排序號作為負載值,依據(jù)負載值對F-List中的各項分組。

進一步的,所述G-List采用哈希表存儲。

本發(fā)明采用上述方案,在性能上優(yōu)于其他并行算法方案,并且在游戲挖掘性能上得到很大的提升,具體如下:

1)使用N-List,這種方法可以減小復雜度,在一般的頻繁項集挖掘方法中,均使用樹來進行遞歸,不僅占用空間而且樹遞歸復雜度遠遠超過該方法的遞歸,同時本方法采用獨特的比較方法,并沒有將N-List中的每個PP-code進行比較,若將兩個N-List的每個PP-code進行比較,復雜度為O(mn),m和n分別為兩個N-List的長度,而這種獨特比較方法的復雜度僅為O(m+n),也大大減小了遞歸復雜度;

2)使用新的概念G-Subsume用于MapReduce的并行,在頻繁項集挖掘過程中,通過G-Subsume可以減少N-List的合并比較次數(shù),而是直接與G-Subsume進行合并,大大提高了挖掘效率;

3)一般情況下,G-List會采取取余的方式來進行分組,但是有些項遞歸時間久,有的遞歸時間短,會造成最后結(jié)果等待時間以最久的項為準,同時也會造成負載不均衡,為了均衡負載,本發(fā)明提前預估每個項的負載:在深度優(yōu)先模式下,PPCTree樹的深度影響著對樹進行先序、后序遍歷的時間,深度越大耗時越多;每一項所在PPCTree樹的最大路徑長度等于它在F-List中相應的排序號,而該項所對應的N-List結(jié)構(gòu)的最大長度等于該項的支持數(shù)與2n-1二者之間的最小值,其中n為該項在F-List中的序號。根據(jù)以上兩個規(guī)則可以輕易的預估每個項的負載,即可以實現(xiàn)本發(fā)明的負載均衡。

附圖說明

圖1為本發(fā)明頻繁挖掘方法的流程圖;

圖2為Mapper和Reducer進行頻繁項集挖掘的流程圖;

圖3為本發(fā)明PPCTree的構(gòu)建過程;

圖4為本發(fā)明遞歸挖掘中由頻繁一項集得到頻繁二項集的流程圖;

圖5為本發(fā)明負載均衡策略的示意圖;

圖6為本發(fā)明MapReduce過程的示意圖。

具體實施方式

為了使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本方面進行進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本方面,并不用于限定本發(fā)明。

首先對本發(fā)明涉及的術語進行說明:

頻繁項集:也稱為項集,項的集合稱為項集;只要項集出現(xiàn)比例達到給定的常數(shù)s,這些項集都是頻繁項集。

頻繁K項集:K個項的項集且是頻繁項集的稱為頻繁K項集。

支持度:項集的出項頻率是包含項集的事務數(shù),簡稱為項集的支持度。

MapReduce:是一種編程模型,用于大規(guī)模數(shù)據(jù)集(大于1TB)的并行運算。概念"Map(映射)"和"Reduce(歸約)"是它們的主要思想,都是從函數(shù)式編程語言里借來的,還有從矢量編程語言里借來的特性。它極大地方便了編程人員在不會分布式并行編程的情況下,將自己的程序運行在分布式系統(tǒng)上。當前的軟件實現(xiàn)是指定一個Map(映射)函數(shù),用來把一組鍵值對映射成一組新的鍵值對,指定并發(fā)的Reduce(歸約)函數(shù),用來保證所有映射的鍵值對中的每一個共享相同的鍵組。

圖1所示為本發(fā)明頻繁挖掘方法的流程圖。本發(fā)明方法應用于MapReduce平臺,首先在MapReduce上得到每項出現(xiàn)次數(shù),經(jīng)過排序以及閾值篩選,剔除不符合的項,得到F-List,然后劃分F-List得到G-List,根據(jù)G-List的劃分,記錄傳給Mapper,并經(jīng)過Mapper處理,將各個事務傳給Reducer,在Reducer上進行MapReduce的挖掘部分。首先需要得到每個Reducer上的PPCTree,得到PPCTree后進而得到N-List,以及各個Reducer上對應項的G-Subsume,最后根據(jù)N-List和G-Subsume遞歸得到最終的頻繁項集。

更具體而言,本發(fā)明頻繁挖掘方法的詳細流程如下:

為實現(xiàn)上述目的,本發(fā)明有以下步驟:

(1)通過Mapreduce統(tǒng)計原始數(shù)據(jù)中各項的出現(xiàn)次數(shù)。其子步驟為:

(1-1)對原始數(shù)據(jù)庫進行水平分片處理,分片得到的每一個子文件叫做Block塊,Block塊被分配到集群中的節(jié)點上,該步驟由Hadoop平臺自動進行;

(1-2)Block塊作為每個Map函數(shù)的輸入數(shù)據(jù),Mapper的輸入鍵值對是<key,value=Ti>,Ti表示Block塊中的一條數(shù)據(jù)。對于數(shù)據(jù)Ti中的每一個項aj,Mapper輸出鍵值對<key=aj,value=1>;

(1-3)Reduce合并來自各個Mapper的鍵值對。具體而言,所有key=aj的鍵值對將被分配到同一個Reducer,所以Reducer的輸入是<key=aj,value={1,1,...,1}>。Reducer只需要進行一次求和,然后輸出<key=aj,value=sum{1,1,...,1}>;

(2)依據(jù)各項出現(xiàn)次數(shù)篩選出頻繁一項,并按照出現(xiàn)次數(shù)由高到低排序構(gòu)建得到包含頻繁一項和對應出現(xiàn)次數(shù)信息的F-List。其子步驟如下:

(2-1)上述操作完成后,Reducer的輸出鍵值對結(jié)果保存在HDFS上,從HDFS上讀取結(jié)果文件;

(2-2)排序并剔除不符合項。根據(jù)鍵值對中value值進行降序排序,同時,根據(jù)給定閾值,剔除小于閾值的項,得到F-List;

(3)按照負載均衡原則對F-List中的各項分組,得到包含項和其所屬組號信息的G-List。其子步驟如下:

(3-1)提前對F-List中的每一項負載進行預測,按照負載均衡原則劃分F-List;

(3-2)根據(jù)F-List劃分結(jié)果構(gòu)建G-List。G-List包含兩項:項和其所屬組號信息gid。同時,構(gòu)造哈希表存儲;

(4)Mapper對原始數(shù)據(jù)進行分配:

(4-1)對每條數(shù)據(jù)的各項按照F-List中項順序進行重新排序;

(4-2)從每條數(shù)據(jù)的最后一項開始讀取項item,在G-List中查找item的組號gid,然后以gid作為鍵key,將排在item前面的所有項作為值value構(gòu)成鍵值對<key=gid,value=items>,作為Mapper輸出的鍵值對,若組號gid已出現(xiàn)過,則忽略,繼續(xù)取前一項進行相同操作,直到一條數(shù)據(jù)處理完畢;

(5)Reducer對Mapper輸出的鍵值對進行頻繁項集挖掘:

(5-1)根據(jù)Mapper輸出的key=gid,將value=items分配給相應的reducer,reducer構(gòu)建PPCtree;PPCtree為樹狀結(jié)構(gòu),每個節(jié)點包含五個屬性值:名字、支持度frequency、子節(jié)點、前序遍歷序號pre和后序遍歷序號post;

(5-2)對于PPC-tree中每個節(jié)點Ni,將<Ni.pre,Ni.post,Ni.frequency>命名為PP-code,將各PP-code按照pre的升序排序,構(gòu)建得到F-List中每個頻繁一項的N-List;

(5-3)構(gòu)建該Reducer的G-Subsume。G-Subsume為本發(fā)明提出的新概念:G-Subsume(A)={A,B∈I1,A和B表示兩個不同的頻繁一項,A.gid表示項A的組號,Reducer.gid表示Reducer對應的組號。G-Subsume僅針對于頻繁一項集,即找出所有該Reducer對應gid的對應的頻繁一項集的G-Subsume。A.gid∈Reducer.gid表示僅針對Reducer.gid對應的頻繁一項集尋找G-Subsume。每條數(shù)據(jù)有對應的ID,g(X)表示包含項X的數(shù)據(jù)ID的集合,則表示包含項A的每條數(shù)據(jù)中一定包含項B,而包含項B的每條數(shù)據(jù)中不一定包含項A。G-Subsume等價于針對Reducer.gid對應的頻繁一項集找到其祖先的集合,在后續(xù)挖掘中,顯而易見,若A的G-Subsume為{A1,A2,…,Am},則該集合的2m-1個非空子集與A的結(jié)合的支持度等于A的支持度,該特性可以用于后續(xù)頻繁項集挖掘,如若G-Susbume(A)={B},XA是頻繁項,則XBA必為頻繁項。

(5-4)遞歸挖掘,其子步驟如下:

a)以F-List作為第一輪的遞歸初始數(shù)據(jù),從最后一項L的N-List即NLast開始進行遞歸,將最后一項L與其G-Subsume結(jié)合,生成頻繁二項集,寫入結(jié)果數(shù)組Result,并不作為遞歸挖掘頻繁三項集的初始數(shù)據(jù),僅作為結(jié)果數(shù)據(jù)加入Result;

b)在遞歸初始數(shù)據(jù)中從前往后的分別將項X的N-List即NX的PP-code與NLast的PP-code進行比較,若X存在于L的G-Susbume中,則繼續(xù)取后一項,否則:當NX的PP-code的pre小于NLast的PP-code,且NX的PP-code的post大于NLast的PP-code的post,則將結(jié)果<NX.PP-code.pre,NX.PP-code.post,NLast.PP-code.frequency>加入新的N-List,名字為XL,且NLast的PP-code后移;若當NX的PP-code的pre小于NLast的PP-code,且NX的PP-code的post小于NLast的PP-code的post,則NX的PP-code后移;若當NX的PP-code的pre大于NLast的PP-code,則NLast的PP-code后移,直到NLast和NX的PP-code都遍歷完畢,這種方法可以減小復雜度,若將NLast和NX的每個進行比較,復雜度為O(mn),m和n分別為NLast和NX的長度,而這種方法的復雜度僅為O(m+n),NX的PP-code遍歷完畢后,若最后結(jié)果XL的N-List的PP-code的支持度之和不滿足閾值,則刪除XL,若滿足則XL為頻繁二項集;

c)繼續(xù)將后一個項的N-List的PP-code與NLast的PP-code進行比較即重復步驟b),直至所有項比較完畢,即得到了以最后一項L為后綴的頻繁二項集的集合{AL,BL…}及其每項的N-List,寫入結(jié)果數(shù)組Result并將其N-List作為頻繁三項集挖掘的初始數(shù)據(jù),由于上述(5-3)介紹的特性,該頻繁二項集直接與L的G-Subsume合并得到以L為后綴的部分頻繁三項集,加入Result;

d)繼續(xù)取前一項進行上述a)、b)、c)操作,直至所有項操作完畢,即得到了所有的頻繁二項集和部分頻繁三項集,上述步驟可知所有與G-Subsume合并得到的頻繁項集不作為遞歸挖掘的初始數(shù)據(jù),即下一步挖掘頻繁三項集并不使用與G-Subsume合并得到的頻繁項集;

e)得到所以的頻繁二項集后,進一步挖掘頻繁三項集,僅前綴不一樣的兩項才可能得到頻繁三項集,即AX和BX才能進行判斷是否能得到頻繁三項集。提取僅前綴不一樣的頻繁二項集作為第二輪的遞歸初始數(shù)據(jù),從最后一項開始與其前面的項進行比較,從前往后比較,比較方式與b)-d)步驟相同,對AX和BX的N-List進行比較,最后循環(huán)比較得到所有的頻繁三項集,并將頻繁三項集中后綴有G-Subsume的項與其G-Subsume結(jié)合得到頻繁四項集;

f)以此類推,直到最后通過N-List比較得到的頻繁K項集(即不包括G-Subsume合并得到的頻繁K項集)中只有一個項,遞歸結(jié)束;

(5-5)Reducer輸出<key=item∈gid,value=Result>,完成所有的頻繁項集挖掘過程。

至此完成頻繁項集挖掘的所有步驟,下面以游戲應用為例講解該發(fā)明的應用:

1)對游戲用戶分群,本發(fā)明采用根據(jù)用戶使用英雄個數(shù)和用戶使用英雄序列長度來制作熱度圖,進而分割用戶群體。

2)數(shù)據(jù)去噪,在原始數(shù)據(jù)中,存在很多無用的干擾數(shù)據(jù),如第一局游戲中必須使用的英雄,該數(shù)據(jù)沒有任何意義,需要進行數(shù)據(jù)去燥,得到不同人群用戶的有意義的使用英雄序列。

3)將該算法應用于該序列,得到挖掘的最后結(jié)果,即用戶使用英雄序列的頻繁模式,逐步引導用戶由用戶使用個數(shù)少、用戶使用英雄序列長度短到用戶使用個數(shù)多、用戶使用英雄序列長度長的人群中。

圖2所示為本發(fā)明Mapper和Reducer進行頻繁項集挖掘的流程圖,首先在Mapper中,每條數(shù)據(jù)按照F-List的順序進行排序,根據(jù)G-List的劃分,每條數(shù)據(jù)經(jīng)過循環(huán)處理,將處理結(jié)果傳給Reducer;在Reducer上,首先需要得到每個Reducer上的PPCTree,得到PPCTree后進而得到N-List,以及G-Subsume,最后根據(jù)遞歸挖掘得到最終的頻繁項集。

圖3所示為本發(fā)明中PPCTree的構(gòu)建過程,以圖中輸入為實例,首先按照ABC的順序依次向根節(jié)點為空的樹中插入,第二條數(shù)據(jù)為B、C,首先查找根節(jié)點下是否B節(jié)點,未發(fā)現(xiàn)B節(jié)點,新建并插入B節(jié)點,查找B節(jié)點下是否有C節(jié)點,未發(fā)現(xiàn)C節(jié)點,新建并插入C節(jié)點;第三條數(shù)據(jù)為A、B、D,首先查到到A和B節(jié)點,但是B節(jié)點的子節(jié)點未發(fā)現(xiàn)D節(jié)點,在B節(jié)點下新建插入D節(jié)點;最后一條數(shù)據(jù)為B、D,首先查找到B節(jié)點,但未在B節(jié)點的子節(jié)點中發(fā)現(xiàn)D節(jié)點,在B節(jié)點下新建并插入D節(jié)點,最后完成PPCTree的構(gòu)建。

圖4所示為本發(fā)明遞歸挖掘中由頻繁一項集得到頻繁二項集的流程圖,首先由最后一項Ln與其G-Subsume合并得到部分頻繁二項集,從前往后,將每一項與Ln的G-Subsume進行比較,看該項是否包含于G-Subsume中,若包含則去下一項,不包含則將該項的N-List與Ln的N-List進行比較,比較每個PP-code,比較規(guī)則如下:當Nx的PP-code的pre小于Nn的PP-code,且Nx的PP-code的post大于Nn的PP-code的post,則將結(jié)果<Nx.PP-code.pre,Nx.PP-code.post,Nn.PP-code.frequency>加入新的N-List,名字為LxLn,且Nn的PP-code后移;若當Nx的PP-code的pre小于Nn的PP-code,且Nx的PP-code的post小于Nn的PP-code的post,則Nx的PP-code后移;若當Nx的PP-code的pre大于Nn的PP-code,則Nn的PP-code后移,直到Nn和NX的PP-code都遍歷完畢,若最后結(jié)果XL的N-List的PP-code的支持度之和不滿足閾值,則刪除XL,若滿足則XL為頻繁二項集;繼續(xù)將后一個項的N-List的PP-code與Nn的PP-code進行比較,直至所有項比較完畢,即得到了以最后一項Ln為后綴的頻繁二項集,再取Ln的前一項,進行同樣的操作,直至取到第二項結(jié)束,即得到了所有的頻繁二項集,后續(xù)頻繁k項集的挖掘方法類似于頻繁二項集的挖掘方法,不做過多闡述,需要注意的是G-Subsume后續(xù)合并是根據(jù)頻繁項后綴的G-Subsume來進行合并,以及采用G-Subsume與項合并產(chǎn)生的頻繁k項集不需要作為頻繁k+1項集的初始數(shù)據(jù),僅僅作為挖掘結(jié)果,以及后續(xù)頻繁k項集挖掘中,N-List的比較僅僅在僅前綴不同的兩項中進行比較,如AX和BX進行比較。

圖5所示為本發(fā)明中負載均衡策略的示意圖,對于每項,需要將其加入對應的G-List中的組,組號gid,一般情況下,會采取取余的方式來進行分組,但是有些項遞歸時間久,有的遞歸時間短,會造成最后結(jié)果等待時間以最久的項為準,同時也會造成負載不均衡,為了均衡負載,采取該負載均衡策略,本發(fā)明提前預估每個項的負載,預估采用以下幾個依據(jù):

1)在深度優(yōu)先模式下,PPCTree樹的深度影響著對樹進行先序、后序遍歷的時間,深度越大耗時越多;

2)當合并兩個頻繁項集對應的N-List時其時間復雜度為兩個N-List長度之和;

3)每一項所在PPCTree樹的最大路徑長度等于它在F-List中相應的排序號,而該項所對應的N-List結(jié)構(gòu)的最大長度等于該項的支持數(shù)與2n-1二者之間的最小值,其中n為該項在F-List中的序號;

所以用F-List中的相應序號估算每項的負載,估算負載后,為了達到負載均衡,本發(fā)明采用貪心算法,將每項加入現(xiàn)有組負載之和最小的那一組中,直到所有項分配完畢。

圖6所示為本發(fā)明中MapReduce過程的示意圖。本發(fā)明要經(jīng)歷兩次MapReduce過程,第一MpaReuce由Map輸出<key=item,value=1>,Reducer進而對每項的value相加,輸出<key=item,value=sum{1,1…1}>,第二次MapReduce則是進行數(shù)據(jù)挖掘,得到了F-List和G-List后,依照N-List和Subsume進行數(shù)據(jù)挖掘得到最終結(jié)果。

本發(fā)明采用上述方案,在性能上優(yōu)于其他并行算法方案,并且在游戲挖掘性能上得到很大的提升,具體如下:

1)使用N-List,這種方法可以減小復雜度,在一般的頻繁項集挖掘方法中,均使用樹來進行遞歸,不僅占用空間而且樹遞歸復雜度遠遠超過該方法的遞歸,同時本方法采用獨特的比較方法,并沒有將N-List中的每個PP-code進行比較,若將兩個N-List的每個PP-code進行比較,復雜度為O(mn),m和n分別為兩個N-List的長度,而這種獨特比較方法的復雜度僅為O(m+n),也大大減小了遞歸復雜度;

2)使用新的概念G-Subsume用于MapReduce的并行,在頻繁項集挖掘過程中,通過G-Subsume可以減少N-List的合并比較次數(shù),而是直接與G-Subsume進行合并,大大提高了挖掘效率;

3)一般情況下,G-List會采取取余的方式來進行分組,但是有些項遞歸時間久,有的遞歸時間短,會造成最后結(jié)果等待時間以最久的項為準,同時也會造成負載不均衡,為了均衡負載,本發(fā)明提前預估每個項的負載:在深度優(yōu)先模式下,PPCTree樹的深度影響著對樹進行先序、后序遍歷的時間,深度越大耗時越多;每一項所在PPCTree樹的最大路徑長度等于它在F-List中相應的排序號,而該項所對應的N-List結(jié)構(gòu)的最大長度等于該項的支持數(shù)與2n-1二者之間的最小值,其中n為該項在F-List中的序號。根據(jù)以上兩個規(guī)則可以輕易的預估每個項的負載,即可以實現(xiàn)本發(fā)明的負載均衡。

本領域的技術人員容易理解,以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。

當前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
攀枝花市| 沈丘县| 盐池县| 安吉县| 青神县| 长春市| 顺昌县| 临猗县| 淮阳县| 桃江县| 思南县| 海伦市| 垫江县| 永仁县| 遂溪县| 武安市| 瑞金市| 崇左市| 壤塘县| 会泽县| 临夏县| 二连浩特市| 赤水市| 宜川县| 玉龙| 香港 | 枣强县| 尼玛县| 诏安县| 台山市| 鄂托克前旗| 凉城县| 两当县| 扎鲁特旗| 毕节市| 五大连池市| 扎赉特旗| 龙南县| 高平市| 枝江市| 茌平县|