本發(fā)明屬于計(jì)算機(jī)信息挖掘及檢索
技術(shù)領(lǐng)域:
:,具體涉及一種基于深度剪枝策略的關(guān)聯(lián)規(guī)則挖掘方法。
背景技術(shù):
::隨著大量的數(shù)據(jù)不停的收集和存儲(chǔ),越來越多的人開始對(duì)從他們的數(shù)據(jù)庫中挖掘關(guān)聯(lián)規(guī)則的興趣度逐漸增加。從大量的商務(wù)事務(wù)記錄中發(fā)現(xiàn)有趣的關(guān)聯(lián)關(guān)系,可以幫助許多商務(wù)決策的制定。比如經(jīng)典的購物籃分析:通過發(fā)現(xiàn)顧客放入購物籃中不同商品之間的關(guān)系,分析顧客的購買習(xí)慣。并通過發(fā)現(xiàn)不同商品之間的關(guān)聯(lián),來幫助零售商制定營(yíng)銷策略。數(shù)據(jù)挖掘是指采用某種方式對(duì)既定的數(shù)據(jù)進(jìn)行分析處理,從中發(fā)現(xiàn)一些潛在的有用的信息的過程。關(guān)聯(lián)規(guī)則指的是挖掘和發(fā)現(xiàn)大量數(shù)據(jù)中項(xiàng)集之間的有趣的關(guān)聯(lián)或相關(guān)的聯(lián)系。當(dāng)前大數(shù)據(jù)時(shí)代的到來,使得數(shù)據(jù)挖掘更加成為各方面關(guān)注的重點(diǎn)研究領(lǐng)域,apriori算法就是應(yīng)用最廣泛的關(guān)聯(lián)規(guī)則挖掘方法之一??焖僭鲩L(zhǎng)的巨大數(shù)據(jù)為關(guān)聯(lián)規(guī)則挖掘等關(guān)鍵技術(shù)帶來了新的挑戰(zhàn),其中最為重要的一個(gè)問題就是數(shù)據(jù)規(guī)模,傳統(tǒng)算法一時(shí)之間無法很好地適應(yīng)。為此,研究者們也從各種角度和思路出發(fā)進(jìn)行了很多探索。從1994年r.agrawal和srikant提出apriori算法以來,國(guó)內(nèi)外對(duì)于關(guān)聯(lián)規(guī)則的研究一直沒有停歇,目前從挖掘模式的角度分析,主要有以下幾種:(1)寬度優(yōu)先算法,也稱為分層算法,包括由agrawal等人提出的apriori[1],aprioritid[2]和apriorihybrid[3],park等人提出的dhp(directhashingandpruning)[4]算法等。但是分層算法的缺點(diǎn)是需要多次掃描數(shù)據(jù)庫,然后需要生成大量的候選項(xiàng)集。(2)深度優(yōu)先算法,常見的有fp-growth(frequentpattern-growth)[5]算法,op(opportunisticprojection)[6]算法,treeprojection[7]算法等。fp-growth是深度優(yōu)先算法里面較為高效的算法:它采用了分治策略:兩次掃描數(shù)據(jù)庫,將提供頻繁項(xiàng)集的事務(wù)集壓縮到一棵頻繁模式樹里,該頻繁模式樹類似于前綴樹,相同前綴的路徑可以共用,從而達(dá)到壓縮數(shù)據(jù)的目的,且不會(huì)產(chǎn)生龐大的候選項(xiàng)集,在時(shí)間和空間效率上都有明顯的提高。但是它同樣存在一些問題:在處理很大而且很稀疏的數(shù)據(jù)庫時(shí),無論是挖掘處理還是遞歸計(jì)算,都需要特別大的空間。(3)數(shù)據(jù)集劃分算法,包括savasere等人提出的partition[8]算法,brin等人提出的dic(dynamicitemsetcounting)[9]算法等。partition算法的好處是可以將整個(gè)數(shù)據(jù)庫劃分為幾個(gè)相互獨(dú)立的數(shù)據(jù)塊,方便將不同的數(shù)據(jù)塊放入內(nèi)存進(jìn)行處理。它單獨(dú)考慮每個(gè)邏輯塊生成的頻繁項(xiàng)集,然后根據(jù)“頻繁項(xiàng)集至少在一個(gè)分區(qū)中是頻繁的”這一性質(zhì),把所有邏輯塊生成的頻繁項(xiàng)集合并到一起,形成全局候選項(xiàng)集。最后再次掃描數(shù)據(jù)庫計(jì)算項(xiàng)集的支持度,進(jìn)行全局計(jì)數(shù)。整個(gè)過程也只是需要掃描兩次數(shù)據(jù)庫,但是卻會(huì)生成巨大的候選集。dic算法也是利用將數(shù)據(jù)庫進(jìn)行劃分的方法,將數(shù)據(jù)庫劃分為多個(gè)部分并在每個(gè)部分的開始做標(biāo)記,便于在掃描數(shù)據(jù)庫過程中在標(biāo)記點(diǎn)添加候選項(xiàng)集,在計(jì)算項(xiàng)集時(shí)并行計(jì)算可能為頻繁項(xiàng)集的支持度。但是,數(shù)據(jù)集劃分算法的問題是執(zhí)行時(shí),同時(shí)產(chǎn)生的頻繁項(xiàng)集的精度不高。不過由于其有較高的并行性,而且只需要兩次掃描數(shù)據(jù)庫,大大減少了i/o操作從而提高了算法效率。(4)采樣算法,包括由park等人提出的可調(diào)精度的挖掘算法,toivonen提出的sampling[10]算法等。sampling算法是從數(shù)據(jù)庫d中隨機(jī)抽取一個(gè)可以調(diào)入內(nèi)存的數(shù)據(jù)庫子集d’,然后用數(shù)據(jù)庫剩余的部分來驗(yàn)證規(guī)則的正確性。它能很大程度上減少掃描數(shù)據(jù)庫的時(shí)間,但是缺點(diǎn)就是因?yàn)閿?shù)據(jù)子集d’的覆蓋度的問題導(dǎo)致結(jié)果不精確。(5)增量式更新算法,利用已挖掘的關(guān)聯(lián)規(guī)則在變化的數(shù)據(jù)庫或參數(shù)上發(fā)現(xiàn)新的關(guān)聯(lián)規(guī)則,并刪除過時(shí)的關(guān)聯(lián)規(guī)則來維護(hù)數(shù)據(jù)集更新的問題。目前的增量式更新算法大多在apriori算法基礎(chǔ)上進(jìn)行的改進(jìn)。包括d.w.cheung等提出的fdm-lup(fastdistributedminingofassociationruleswithlocalandupper-bound-pruning)[11]算法,馮玉才等人提出的iua(incrementalupdatingalgorithm)和piua(parallelincrementalupdatingalgorithm)[12]算法等。(6)并行算法,利用同時(shí)運(yùn)行的多個(gè)進(jìn)程來協(xié)同合作解決既定問題。包括agrawal等人提出的cd(countdistribution),dd(datadistribution),cad(candidatedistribution)[13]算法,park等人提出的pdm(paralleldatamining)[14]算法,cheung等人提出的dma(distributedminingofassociationrules)[15]算法等。雖然并行挖掘算法能夠利用到空閑的處理器,但是通信量和候選頻繁項(xiàng)集都比較大,并且可能會(huì)帶來冗余計(jì)算或者大量i/o操作的問題。綜上可見,apriori算法及其系列改進(jìn)方法一直是關(guān)聯(lián)規(guī)則挖掘的基礎(chǔ)核心技術(shù),其效果早已得到大家的認(rèn)可,但其速度和效率也是眾多研究者努力的重點(diǎn),因?yàn)檫@直接影響到其在應(yīng)對(duì)大數(shù)據(jù)需求時(shí)的可用性。aproiri[1]算法是關(guān)聯(lián)規(guī)則挖掘中的經(jīng)典算法,該算法使用基于使用頻繁項(xiàng)集性質(zhì)的先驗(yàn)知識(shí),通過“逐層搜索”的迭代方式,利用k-頻繁項(xiàng)集來生成(k+1)-候選項(xiàng)集,再掃描數(shù)據(jù)庫,通過驗(yàn)證當(dāng)前的候選項(xiàng)集是否是頻繁項(xiàng)集的方式來進(jìn)行剪枝,從而獲得(k+1)-頻繁項(xiàng)集。apriori算法存在以下問題:(1)在生成k-頻繁項(xiàng)集時(shí),要對(duì)事務(wù)數(shù)據(jù)庫進(jìn)行多次掃描,頻繁的i/o導(dǎo)致運(yùn)行時(shí)間過長(zhǎng)。(2)運(yùn)行過程中會(huì)對(duì)項(xiàng)集進(jìn)行連接,生成龐大的候選集,對(duì)運(yùn)行時(shí)間和主存空間都提出了要求。針對(duì)原始apriori算法的不足,一些研究人員提出了基于矩陣的apriori算法,這類算法首先將事務(wù)數(shù)據(jù)庫用矩陣表示出來,通過對(duì)矩陣內(nèi)的各向量間的與運(yùn)算,代替去數(shù)據(jù)庫查找項(xiàng)集的支持度計(jì)數(shù),提高了計(jì)算的效率。但是基于矩陣的apriori算法仍存在以下問題:1)在運(yùn)算過程中多次掃描矩陣,增加了運(yùn)算的時(shí)間。2)壓縮矩陣過程中,只壓縮了事務(wù)集或者只壓縮了項(xiàng)集,存儲(chǔ)了很多與生成頻繁項(xiàng)集無關(guān)的元素。趙宏利等人在基于壓縮矩陣的cm_apriori的基礎(chǔ)上做了一些改進(jìn),提出了mtca[16]算法,主要從多線程,項(xiàng)集排序,矩陣存儲(chǔ),矩陣壓縮和結(jié)束條件進(jìn)行優(yōu)化,優(yōu)化方面如下:1)把事務(wù)數(shù)據(jù)庫分成了大小相同,互不相交的數(shù)據(jù)塊,然后啟動(dòng)多個(gè)線程對(duì)分割的數(shù)據(jù)塊進(jìn)行掃描。再把掃描的結(jié)果合成一個(gè)矩陣。形成最后的有關(guān)整個(gè)事務(wù)集的布爾矩陣,這樣能夠極大的減少掃描數(shù)據(jù)庫的時(shí)間。2)將1-頻繁項(xiàng)集按照支持度計(jì)數(shù)遞增的順序進(jìn)行排列,這樣排序后的頻繁項(xiàng)集能夠在后續(xù)的自連接中生成較小的k-候選項(xiàng)集。3)增加權(quán)值數(shù)組w和數(shù)組m,權(quán)值數(shù)組w用來對(duì)事務(wù)集中的事務(wù)進(jìn)行計(jì)數(shù),在掃描事務(wù)集,生成有關(guān)事務(wù)的布爾矩陣的時(shí)候,如果遇到重復(fù)的事務(wù),只需要將相應(yīng)的計(jì)數(shù)器加一即可。而數(shù)組m則用來記錄布爾矩陣中每一行,也就是某一事務(wù)中的1的計(jì)數(shù)??梢酝ㄟ^判斷數(shù)組m中的值是否大于1來選擇是否刪除該行。4)在項(xiàng)集中的項(xiàng)按照字典順序排列,在k-頻繁項(xiàng)集lk自連接生成(k+1)-項(xiàng)集時(shí),如果兩個(gè)k-頻繁項(xiàng)集的前(k-1)項(xiàng)不相同,則說明這兩個(gè)項(xiàng)集是不可連接的。將每個(gè)項(xiàng)集和項(xiàng)集中的項(xiàng)按照1-頻繁項(xiàng)集支持度計(jì)數(shù)遞增的順序排列,如果兩個(gè)k-頻繁項(xiàng)集lx和ly不能連接,則對(duì)于k-頻繁項(xiàng)集lx來說,處在k-頻繁項(xiàng)集ly之后的所有頻繁項(xiàng)集都是不可連接的。因此,在掃描矩陣時(shí),如果一個(gè)頻繁項(xiàng)集與相鄰的頻繁項(xiàng)集不可連接,則刪掉該項(xiàng)集對(duì)應(yīng)的行,修改好數(shù)組m的值。5)不包含任何k-頻繁項(xiàng)集的事務(wù)不可能包含任何(k+1)-頻繁項(xiàng)集。當(dāng)數(shù)組m中出現(xiàn)小于等于1的值的時(shí)候,認(rèn)為該值對(duì)應(yīng)的項(xiàng)集是不可繼續(xù)連接的,無法生成頻繁項(xiàng)集,可以將該列值為1的行刪去后(這個(gè)項(xiàng)集肯定無法與其他項(xiàng)集連接生成頻繁項(xiàng)集),再刪去該列,從而達(dá)到壓縮矩陣的目的。6)通過對(duì)項(xiàng)集對(duì)應(yīng)行向量進(jìn)行與操作,并與權(quán)值數(shù)組w中的權(quán)值相乘后求和,來計(jì)算出連接后的項(xiàng)集的支持度計(jì)數(shù)。通過與最小支持度計(jì)數(shù)進(jìn)行比較,來判斷連接后的項(xiàng)集是否是頻繁項(xiàng)集。如果k-頻繁項(xiàng)集可以生成(k+1)-頻繁項(xiàng)集,則k-頻繁項(xiàng)集的個(gè)數(shù)一定大于等于k+1,所以如果最后k-頻繁項(xiàng)集數(shù)小于k+1時(shí),就無法生成(k+1)-候選項(xiàng)集,即可提前終止。7)mtca算法是一種通過頻繁項(xiàng)集之間的“與運(yùn)算”來替代原始apriori算法中需要每次返回事務(wù)數(shù)據(jù)庫遍歷查找頻繁項(xiàng)集的方法。然而,mtca算法在k-頻繁項(xiàng)集連接生成(k+1)-頻繁項(xiàng)集的過程中仍然連接生成了一些可避免的候選項(xiàng)集,即在這個(gè)過程中仍然存在著可以壓縮的空間。參考文獻(xiàn)說明:[1]agrawalr,srikantr.fastalgorithmsforminingassociationrules[c]//proc.20thint.conf.verylargedatabases,vldb.1994,1215:487-499.[2]agrawalr,mannilah,srikantr,etal.fastdiscoveryofassociationrules[j].advancesinknowledgediscoveryanddatamining,1996,12(1):307-328.[3]agrawalr,srikantr.fastalgorithmsforminingassociationrulesinlargedatabases[c]//proceedingsofthe20thinternationalconferenceonverylargedatabases.morgankaufmannpublishersinc.,1994:487-499.[4]parkjs,chenms,yups.aneffectivehash-basedalgorithmforminingassociationrules[m].acm,1995.[5]hanj,peij,yiny.miningfrequentpatternswithoutcandidategeneration[c]//acmsigmodrecord.acm,2000,29(2):1-12.[6]liuj,pany,wangk,etal.miningfrequentitemsetsbyopportunisticprojection[c]//proceedingsoftheeighthacmsigkddinternationalconferenceonknowledgediscoveryanddatamining.acm,2002:229-238.[7]agarwalrc,aggarwalcc,prasadvvv.atreeprojectionalgorithmforgenerationoffrequentitemsets[j].journalofparallelanddistributedcomputing,2001,61(3):350-371.[8]savaserea,omiecinskier,navathesb.anefficientalgorithmforminingassociationrulesinlargedatabases[j].1995.[9]brins,motwanir,ullmanjd,etal.dynamicitemsetcountingandimplicationrulesformarketbasketdata[c]//acmsigmodrecord.acm,1997,26(2):255-264.[10]toivonenh.samplinglargedatabasesforassociationrules[c]//vldb.1996,96:134-145.[11]cheungdw,hanj,ngvt,etal.afastdistributedalgorithmforminingassociationrules[c]//parallelanddistributedinformationsystems,1996.,fourthinternationalconferenceon.ieee,1996:31-42.[12]馮玉才,馮劍琳.關(guān)聯(lián)規(guī)則的增量式更新算法[j].軟件學(xué)報(bào),1998(4):301-306.[13]agrawalr,shaferjc.parallelminingofassociationrules[c]//ieeetransactionsonknowledgeanddataengineering.1996.[14]parkjs,chenms,yups.efficientparalleldataminingforassociationrules[c]//proceedingsofthefourthinternationalconferenceoninformationandknowledgemanagement.acm,1995:31-36.[15]cheungdw,ngvt,fuaw,etal.efficientminingofassociationrulesindistributeddatabases[j].ieeetransactionsonknowledgeanddataengineering,1996,8(6):911-922.[16]趙宏利.改進(jìn)的apriori算法在大學(xué)生心理分析中的研究[d].華中師范大學(xué),2015。技術(shù)實(shí)現(xiàn)要素:本發(fā)明的目的是在基于壓縮矩陣的apriori方法的基礎(chǔ)上提出一種新的方法,以使得能更好地提升關(guān)聯(lián)規(guī)則挖掘效率。本發(fā)明提供了一種基于深度剪枝策略的關(guān)聯(lián)規(guī)則挖掘方法,包括:將事務(wù)數(shù)據(jù)庫掃描成布爾矩陣,并生成1-頻繁項(xiàng)集的布爾矩陣m1,m1中的每一列和每一行,都按照值從小到大的順序進(jìn)行排列;生成(k+1)-頻繁項(xiàng)集及對(duì)應(yīng)的布爾矩陣,k≥1;當(dāng)k≥3時(shí),每次生成(k+1)-頻繁項(xiàng)集時(shí),先根據(jù)項(xiàng)跟位置關(guān)系對(duì)k-頻繁項(xiàng)集進(jìn)行剪枝,再生成(k+1)-頻繁項(xiàng)集;所述的根據(jù)項(xiàng)跟位置關(guān)系是指:(1)統(tǒng)計(jì)首項(xiàng)為i的k-頻繁項(xiàng)集的數(shù)目,數(shù)目必須大于等于k,(2)對(duì)首項(xiàng)為i的k-頻繁項(xiàng)集的前k-1項(xiàng),設(shè)i代表首項(xiàng)為i的k-頻繁項(xiàng)集中的位置,位置在i的項(xiàng)出現(xiàn)的次數(shù)必須大于等于k-i,i從0開始計(jì)數(shù),且k-i>0;所述的根據(jù)項(xiàng)跟位置關(guān)系對(duì)k-頻繁項(xiàng)集進(jìn)行剪枝,是指將不符合所述項(xiàng)跟位置關(guān)系的k-頻繁項(xiàng)集刪除;當(dāng)(k+1)-頻繁項(xiàng)集的數(shù)目小于k+1,則停止查找,否則更新k值,繼續(xù)生成(k+1)-頻繁項(xiàng)集。更進(jìn)一步地,在(k+1)-頻繁項(xiàng)集生成時(shí),先根據(jù)事務(wù)長(zhǎng)度對(duì)k-頻繁項(xiàng)集的布爾矩陣進(jìn)行壓縮,若布爾矩陣中某事務(wù)長(zhǎng)度小于k,則從該布爾矩陣中刪掉該事務(wù)。具體地,本發(fā)明實(shí)現(xiàn)的基于深度剪枝策略的關(guān)聯(lián)規(guī)則挖掘方法的具體步驟為:步驟1,將事務(wù)數(shù)據(jù)庫d掃描成布爾矩陣m;矩陣m中的每列表示一個(gè)事務(wù),每行表示一個(gè)項(xiàng)或者項(xiàng)集;步驟2,對(duì)布爾矩陣m進(jìn)行去重壓縮和排序;步驟3,根據(jù)步驟2處理后的矩陣m尋找1-頻繁項(xiàng)集,按照順序連接1-頻繁項(xiàng)集構(gòu)成2-頻繁項(xiàng)集;將矩陣m中小于最小支持度計(jì)數(shù)的項(xiàng)集對(duì)應(yīng)的行向量刪除后得到矩陣m1,m1為1-頻繁項(xiàng)集對(duì)應(yīng)的布爾矩陣,根據(jù)事務(wù)長(zhǎng)度對(duì)布爾矩陣進(jìn)行壓縮;在將1-頻繁項(xiàng)集連接生成2-頻繁項(xiàng)集時(shí),若連接的項(xiàng)集的支持度小于最小支持度計(jì)數(shù)時(shí),刪除該項(xiàng)集;在得到2-頻繁項(xiàng)集對(duì)應(yīng)的布爾矩陣m2后,根據(jù)事務(wù)長(zhǎng)度對(duì)矩陣進(jìn)行壓縮。步驟4,對(duì)k-頻繁項(xiàng)集中的每個(gè)項(xiàng)集向下進(jìn)行掃描,生成(k+1)-候選項(xiàng)集。所選取的兩個(gè)項(xiàng)集在前k-1項(xiàng)相同時(shí)才進(jìn)行連接,生成(k+1)-候選項(xiàng)集。步驟5,計(jì)算(k+1)-候選項(xiàng)集的支持度,將小于最小支持度計(jì)數(shù)的候選項(xiàng)集舍棄,生成(k+1)-頻繁項(xiàng)集。步驟6,若(k+1)-頻繁項(xiàng)集的數(shù)目小于k+1,則結(jié)束查找,終止本方法;否則更新所生成的(k+1)-頻繁項(xiàng)集為當(dāng)前的k-頻繁項(xiàng)集,繼續(xù)步驟7。步驟7,根據(jù)事務(wù)長(zhǎng)度對(duì)k-頻繁項(xiàng)集的布爾矩陣進(jìn)行壓縮。步驟8,根據(jù)項(xiàng)跟位置關(guān)系對(duì)k-頻繁項(xiàng)集進(jìn)行剪枝,然后轉(zhuǎn)步驟4執(zhí)行。本發(fā)明的優(yōu)點(diǎn)與積極效果在于:(1)本發(fā)明的關(guān)聯(lián)規(guī)則挖掘方法,在k-頻繁項(xiàng)集的連接開始前盡可能壓縮k-頻繁項(xiàng)集,減少不能連接生成(k+1)-頻繁項(xiàng)集的(k+1)-候選項(xiàng)集,減小布爾矩陣的規(guī)模,從而提升關(guān)聯(lián)規(guī)則挖掘的效率;(2)本發(fā)明的關(guān)聯(lián)規(guī)則挖掘方法,根據(jù)首項(xiàng)出現(xiàn)次數(shù)與項(xiàng)集長(zhǎng)度之間的關(guān)系來判斷是否進(jìn)行剪枝,進(jìn)一步減少不必要的候選項(xiàng)集的生成,提升關(guān)聯(lián)規(guī)則挖掘的效率;(3)采用本發(fā)明方法對(duì)大數(shù)據(jù)集進(jìn)行關(guān)聯(lián)規(guī)則挖掘,相對(duì)于mtca算法,處理時(shí)間要短很多,并且在支持度較低的情況下比apriori標(biāo)準(zhǔn)方法節(jié)約大量的時(shí)間,實(shí)驗(yàn)證明采用本發(fā)明方法獲取關(guān)聯(lián)規(guī)則的效率更高。附圖說明圖1是本發(fā)明實(shí)現(xiàn)的關(guān)聯(lián)規(guī)則挖掘方法的示意圖。具體實(shí)施方式下面將結(jié)合附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說明。本發(fā)明在基于利用壓縮矩陣尋找關(guān)聯(lián)規(guī)則的方法的基礎(chǔ)上,根據(jù)apriori算法的某些性質(zhì)及其推論,主要做了以下的一些調(diào)整和優(yōu)化策略,以更好地提升關(guān)聯(lián)規(guī)則挖掘效率:1)對(duì)1-頻繁項(xiàng)集并不按照支持度計(jì)數(shù)進(jìn)行排序,而是直接按照值大小對(duì)布爾矩陣內(nèi)的向量進(jìn)行排序,例如借助dataframe類型的sort_index函數(shù),對(duì)矩陣的每一列和每一行,按照值從小到大的順序進(jìn)行排列,如果值相同的話不考慮相對(duì)順序的問題。通過排序,確定頻繁項(xiàng)集連接的相對(duì)順序,使得在后面的連接步驟中生成的新項(xiàng)集中,后一個(gè)成員出現(xiàn)的次數(shù)一定小于前一個(gè)成員。對(duì)于k-頻繁項(xiàng)集lk連接生成(k+1)-候選項(xiàng)集時(shí),如果某一k-頻繁項(xiàng)集lk與它下方相鄰的k-頻繁項(xiàng)集lk+1的前(k-1)項(xiàng)相同,則lk和lk+1這兩項(xiàng)即可進(jìn)行連接,且該k-頻繁項(xiàng)集lk要繼續(xù)與相鄰頻繁項(xiàng)集lk+1下的項(xiàng)集判斷是否可以連接,如果不能連接,則停止有關(guān)k-頻繁項(xiàng)集lk的判斷,繼續(xù)判斷下一個(gè)k-頻繁項(xiàng)集lk+1能否與相鄰項(xiàng)集連接。2)考慮(k+1)-頻繁項(xiàng)集必須由k+1個(gè)k-頻繁項(xiàng)集構(gòu)成的性質(zhì),對(duì)k-頻繁項(xiàng)集進(jìn)行剪枝。考慮到k-頻繁項(xiàng)集內(nèi)的項(xiàng)是按照字典序排序,在生成(k+1)-頻繁項(xiàng)集時(shí),可對(duì)以某項(xiàng)開頭的項(xiàng)集進(jìn)行統(tǒng)計(jì):1.統(tǒng)計(jì)首項(xiàng)為im的k-頻繁項(xiàng)集的數(shù)目,如果數(shù)目大于等于k,才可以進(jìn)行下次迭代產(chǎn)生(k+1)-頻繁項(xiàng)集,如果數(shù)目小于k,則該項(xiàng)集不可能生成(k+1)-候選項(xiàng)集,則可將首項(xiàng)為im的k-頻繁項(xiàng)集刪除。2.而對(duì)于首項(xiàng)為im的k-頻繁項(xiàng)集,若在第二項(xiàng)為ik的項(xiàng)集的數(shù)目小于k-1,則可將第二項(xiàng)為ik的所有k-頻繁項(xiàng)集刪除。對(duì)k-頻繁項(xiàng)集剩下的項(xiàng)依次類推,每次檢查其數(shù)目是否大于等于k-i,來決定是否將其對(duì)應(yīng)的項(xiàng)集剔除,其中i為首項(xiàng)為im的k-頻繁項(xiàng)集中的位置,從0開始計(jì)數(shù)。3)對(duì)事務(wù)長(zhǎng)度進(jìn)行統(tǒng)計(jì),對(duì)于k-頻繁項(xiàng)集對(duì)應(yīng)的布爾矩陣,如果其中某個(gè)事務(wù)的長(zhǎng)度小于k,則認(rèn)為該事務(wù)無法生成(k+1)-頻繁項(xiàng)集,因此需要?jiǎng)h掉長(zhǎng)度小于k的事務(wù)。所采用的剪枝策略是因?yàn)橥ㄟ^迭代的方式去生成高階頻繁項(xiàng)集時(shí),會(huì)連接產(chǎn)生過多的非頻繁項(xiàng)集,為了獲得全部的高階頻繁項(xiàng)集,必須將這些非頻繁項(xiàng)集去除。雖然在做全連接時(shí)通過最小支持度計(jì)數(shù)的方式進(jìn)行剪枝是被普遍采用的做法。然而在進(jìn)行連接之前,本發(fā)明方法通過一些規(guī)律和設(shè)定來提前發(fā)現(xiàn)一些在后續(xù)的連接過程中一定不會(huì)產(chǎn)生高階頻繁項(xiàng)集的項(xiàng)或項(xiàng)集,并將其從要進(jìn)行后續(xù)連接操作的矩陣中剔除,從而壓縮進(jìn)行連接的規(guī)模,提高運(yùn)行的效率。下面結(jié)合圖1說明本發(fā)明的基于深度剪枝策略的關(guān)聯(lián)規(guī)則挖掘方法的一個(gè)具體實(shí)現(xiàn)過程。步驟1:把原始事務(wù)數(shù)據(jù)庫d掃描成布爾矩陣m。布爾矩陣m的每列表示一個(gè)事務(wù),每行表示某一個(gè)項(xiàng)或者項(xiàng)集,將布爾矩陣m存入內(nèi)存中。步驟2:對(duì)布爾矩陣m進(jìn)行去重壓縮。對(duì)于兩個(gè)事務(wù),即列向量,如果其包含的字段完全相同,那么將其壓縮成一個(gè)事務(wù),并將該事務(wù)在權(quán)值數(shù)組w中相應(yīng)的值加1,從而使得布爾矩陣m中不存在重復(fù)的列向量,即重復(fù)的事務(wù)集。對(duì)去重壓縮后的布爾矩陣中的向量根據(jù)值大小進(jìn)行排序,本發(fā)明實(shí)施例利用dataframe類型的sort_index函數(shù),使得對(duì)于布爾矩陣的每一列和每一行,都是按照值從小到大的順序進(jìn)行排列,如果值相同的話不考慮相對(duì)順序的問題。通過這次排序,用來確定之后的頻繁項(xiàng)集連接的相對(duì)順序。步驟3:計(jì)算經(jīng)步驟2處理后的m中的每個(gè)項(xiàng)集(行向量)的支持度,刪除小于最小支持度計(jì)數(shù)smin的項(xiàng)集對(duì)應(yīng)的行向量,剩下的即是1-頻繁項(xiàng)集l1對(duì)應(yīng)的布爾矩陣m1。根據(jù)事務(wù)長(zhǎng)度對(duì)布爾矩陣m1進(jìn)行壓縮。布爾矩陣m1的行列在步驟2中已經(jīng)按照值大小進(jìn)行了升序排序,按順序依次將項(xiàng)集進(jìn)行連接,并通過支持度計(jì)數(shù)進(jìn)行剪枝,將連接后滿足支持度計(jì)數(shù)的向量加入新的矩陣m2中,構(gòu)成2-頻繁項(xiàng)集l2。所述的通過支持度計(jì)數(shù)進(jìn)行剪枝,是指根據(jù)最小支持度計(jì)數(shù)smin,刪除小于smin的項(xiàng)集。在得到2-頻繁項(xiàng)集對(duì)應(yīng)的布爾矩陣m2后,根據(jù)事務(wù)長(zhǎng)度對(duì)矩陣進(jìn)行壓縮。根據(jù)事務(wù)長(zhǎng)度對(duì)矩陣進(jìn)行壓縮是指,對(duì)k-頻繁項(xiàng)集對(duì)應(yīng)的布爾矩陣mk,若某事務(wù)長(zhǎng)度小于k,則從該布爾矩陣mk中刪掉該事務(wù)。對(duì)k-頻繁項(xiàng)集,當(dāng)k≥2時(shí),循環(huán)執(zhí)行下面步驟4至步驟8。步驟4:生成(k+1)-候選項(xiàng)集。依次對(duì)k-頻繁項(xiàng)集中的每個(gè)項(xiàng)集向下進(jìn)行掃描,在選取的兩個(gè)k-頻繁項(xiàng)集的前k-1項(xiàng)相同的前提下,對(duì)項(xiàng)集進(jìn)行連接,生成相應(yīng)的(k+1)-候選項(xiàng)集,具體是:依次取第j個(gè)k-頻繁項(xiàng)集和第j個(gè)k-頻繁項(xiàng)集下面的項(xiàng)集,判斷兩個(gè)k-頻繁項(xiàng)集的前k-1項(xiàng)是否相同,如果相同,則進(jìn)行“與運(yùn)算”生成(k+1)-候選項(xiàng)集;如果不相同,則再取第j+1個(gè)k-頻繁項(xiàng)集,與第j+1個(gè)k-頻繁項(xiàng)集下方的項(xiàng)集進(jìn)行連接。步驟5:計(jì)算上一步生成的(k+1)-候選項(xiàng)集與權(quán)值數(shù)組w的內(nèi)積,并將算出的該(k+1)-候選項(xiàng)集的支持度計(jì)數(shù)與最小支持度計(jì)數(shù)進(jìn)行比較進(jìn)行剪枝。如果該(k+1)-候選項(xiàng)集的支持度計(jì)數(shù)大于等于最小支持度計(jì)數(shù),則認(rèn)定該(k+1)-候選項(xiàng)集是(k+1)-頻繁項(xiàng)集,將其加入到新的(k+1)-頻繁項(xiàng)集對(duì)應(yīng)的布爾矩陣mk+1中。否則,舍棄該(k+1)-候選項(xiàng)集。步驟6:如果(k+1)-頻繁項(xiàng)集的數(shù)目小于k+1,則直接跳出循環(huán),結(jié)束查找,終止本方法。否則,更新k值,繼續(xù)進(jìn)行下面步驟。更新k值是指將k自增1,即所生成的(k+1)-頻繁項(xiàng)集作為當(dāng)前的k-頻繁項(xiàng)集。當(dāng)k≥3的時(shí)候,循環(huán)執(zhí)行步驟7和步驟8。步驟7:根據(jù)事務(wù)長(zhǎng)度的性質(zhì),對(duì)k-頻繁項(xiàng)集對(duì)應(yīng)的布爾矩陣進(jìn)行壓縮。計(jì)算k-頻繁項(xiàng)集每個(gè)事務(wù)(列向量)的事務(wù)長(zhǎng)度,并記入計(jì)數(shù)數(shù)組t中,如果t中出現(xiàn)小于等于k的值,表示無法連接成頻繁項(xiàng)集,所以刪去該列向量。步驟8:根據(jù)(k+1)-頻繁項(xiàng)集必須由k+1個(gè)k-頻繁項(xiàng)集構(gòu)成的性質(zhì),來對(duì)k-頻繁項(xiàng)集進(jìn)行剪枝。對(duì)于k-頻繁項(xiàng)集來說,如果能夠連接生成(k+1)-頻繁項(xiàng)集。則首項(xiàng)與該(k+1)-頻繁項(xiàng)集相同的k-頻繁項(xiàng)集的數(shù)目應(yīng)該大于等于k。按照這個(gè)k-頻繁項(xiàng)集首項(xiàng)數(shù)目的特性再次對(duì)項(xiàng)集進(jìn)行剪枝,從而縮小迭代時(shí)進(jìn)行連接的規(guī)模。k-頻繁項(xiàng)集首項(xiàng)數(shù)目的特性是指:首項(xiàng)為i的k-頻繁項(xiàng)集的前k-1項(xiàng),位置在i的項(xiàng)出現(xiàn)的次數(shù)都必須大于等于k-i,i代表首項(xiàng)為i的k-頻繁項(xiàng)集中的位置,i從0開始計(jì)數(shù),且k-i>0。根據(jù)該性質(zhì)來刪去不合適的項(xiàng)集(行向量)。關(guān)聯(lián)規(guī)則說明:設(shè)事務(wù)數(shù)據(jù)庫d中項(xiàng)的全集為i,一條關(guān)聯(lián)規(guī)則就是形如下面的蘊(yùn)含式:x->y其中,x∈i,y∈i,且x與y的交集為空集?;蛘哒f,對(duì)于頻繁項(xiàng)集l,設(shè)q為l中項(xiàng)的子集,形如q->{l-q}的蘊(yùn)含是就是一條關(guān)聯(lián)規(guī)則,{l-q}是集合l去掉子集q的部分。亦可理解為對(duì)于子集q和{l-q},在事務(wù)數(shù)據(jù)庫d中共同出現(xiàn)的次數(shù)滿足最小支持度計(jì)數(shù)要求。支持度的計(jì)算公式:support_count(x->y)=support_count(x∩y)/count(d),support_count(x∩y)表示事務(wù)數(shù)據(jù)庫d中同時(shí)包含x和y的事務(wù)的個(gè)數(shù),count(d)代表事務(wù)的總數(shù)。置信度的計(jì)算公式:confidence(x->y)=support_count(x∩y)/support_count(x),support_count(x)代表事務(wù)數(shù)據(jù)庫d中出現(xiàn)x的事務(wù)的個(gè)數(shù)。下面列出本發(fā)明方法部分實(shí)現(xiàn)的代碼:在實(shí)現(xiàn)本發(fā)明所述的關(guān)聯(lián)規(guī)則挖掘方法時(shí),優(yōu)選地選取的數(shù)據(jù)結(jié)構(gòu),是使用python,并借助numpy模塊和dataframe模塊,實(shí)現(xiàn)較為高效的布爾矩陣的壓縮處理和排序,以提高挖掘效率。在本發(fā)明方法的實(shí)現(xiàn)過程中,多次遇到過算法效率不高的情況,原因在于起初一直試圖用java的相關(guān)方法來對(duì)形成的布爾矩陣直接進(jìn)行結(jié)構(gòu)破壞式的刪減。而在java中,一旦固定大小的矩陣建立,是無法在該矩陣的基礎(chǔ)上進(jìn)行行列刪除操作的。如果選擇通過嵌套列表進(jìn)行矩陣的構(gòu)建,則會(huì)因?yàn)榧糁^程中頻繁的行列刪除操作使得運(yùn)行時(shí)間大大延長(zhǎng)。而選擇將滿足條件的向量寫入新的矩陣的方式則會(huì)引發(fā)讀寫效率低下致使算法運(yùn)行時(shí)間過長(zhǎng)的問題。最后,本發(fā)明優(yōu)選使用python,并借助numpy模塊和dataframe模塊實(shí)現(xiàn)較為高效的矩陣的處理和矩陣排序。實(shí)驗(yàn)結(jié)果與分析:本次實(shí)驗(yàn)是在i7-4790@3.6ghz的cpu,20g內(nèi)存,并安裝有windows7專業(yè)版操作系統(tǒng)的臺(tái)式機(jī)下進(jìn)行的。本發(fā)明方法在python3.5下實(shí)現(xiàn),集成開發(fā)環(huán)境ide則使用jetbrainpycharm。數(shù)據(jù)則是借助了sqlserver2012dataminingadd-insforoffice2010示例數(shù)據(jù)中的tableanalysistoolssample數(shù)據(jù)集。本實(shí)施例設(shè)計(jì)了兩組實(shí)驗(yàn):第一組實(shí)驗(yàn)直接使用該數(shù)據(jù)集,共計(jì)1000條記錄,每條記錄包括用戶編號(hào),婚姻狀態(tài),性別,收入,子女?dāng)?shù),教育狀況,職業(yè)狀況,是否有房,汽車數(shù)量,活動(dòng)范圍,地域,年齡以及是否購買自行車等字段。第二組實(shí)驗(yàn),本實(shí)施例在保持該數(shù)據(jù)集不變的情況下將數(shù)據(jù)量擴(kuò)充到2000條。采用apriori標(biāo)準(zhǔn)方法、mtca方法和本發(fā)明方法進(jìn)行關(guān)聯(lián)規(guī)則挖掘,比較不同支持度下進(jìn)行規(guī)則挖掘所需要的運(yùn)行時(shí)間,實(shí)現(xiàn)結(jié)果如表1和表2所示。表1第一組實(shí)驗(yàn)結(jié)果,單位為秒第一組實(shí)驗(yàn)的結(jié)果顯示,當(dāng)支持度開始降低時(shí),隨著滿足條件的字段的增多,apriori標(biāo)準(zhǔn)算法在運(yùn)行時(shí)間上呈現(xiàn)出指數(shù)增長(zhǎng)的趨勢(shì),并且在耗時(shí)上要遠(yuǎn)遠(yuǎn)超過了其他兩種基于壓縮矩陣的方法。這是由于隨著滿足條件的字段的增多,apriori每次要遍歷大規(guī)模的數(shù)據(jù)集,尤其是在數(shù)據(jù)量擴(kuò)大,2-頻繁項(xiàng)集和3-頻繁項(xiàng)集的數(shù)量急劇增長(zhǎng)的情況下,這時(shí)通過矩陣內(nèi)向量計(jì)算的優(yōu)勢(shì)就能體現(xiàn)出來。所以mtca和本發(fā)明方法在面對(duì)支持度降低的情況下,在時(shí)間上比apriori算法有著明顯的優(yōu)勢(shì)。這也說明在針對(duì)支持度較低的關(guān)聯(lián)規(guī)則發(fā)現(xiàn)需求時(shí),基于壓縮矩陣的apriori算法要比原始的apriori有更優(yōu)異的表現(xiàn)。在mtca和本發(fā)明方法算法的比較中,在支持度計(jì)數(shù)的值下降的過程中,能夠明顯發(fā)現(xiàn)mtca的運(yùn)行時(shí)間的增長(zhǎng)速度要比本發(fā)明方法算法要快。并且在這個(gè)過程中,兩個(gè)算法運(yùn)行時(shí)間的差距越來越大:當(dāng)支持度為0.02時(shí),兩者時(shí)間相差無幾,而當(dāng)支持度下降到0.005的時(shí)候,本發(fā)明方法可以比mtca算法要節(jié)省11秒之多,耗時(shí)僅為mtca算法的用時(shí)的78.3%,為apriori算法耗時(shí)的8.1%。經(jīng)實(shí)驗(yàn)結(jié)果表明,本發(fā)明方法在運(yùn)行時(shí)間上明顯要比mtca算法和apriori算法短很多,并且在支持度較低的情況下能夠比apriori標(biāo)準(zhǔn)算法節(jié)約大量的時(shí)間,從而體現(xiàn)了改進(jìn)部分的優(yōu)越性。表2第二組實(shí)驗(yàn)結(jié)果,單位為秒同樣,通過對(duì)第二組數(shù)據(jù)的處理,繼續(xù)驗(yàn)證了本發(fā)明方法在運(yùn)行時(shí)間上比mtca算法有著明顯的優(yōu)勢(shì),并且在支持度較低的情況下比apriori標(biāo)準(zhǔn)方法節(jié)約大量的時(shí)間,例如,在支持度為0.005時(shí),本發(fā)明的用時(shí)依然比mtca和apriori算法節(jié)約很多,分別是mtca算法的57.8%和aproiri算法用時(shí)的16.3%。從兩組實(shí)驗(yàn)的對(duì)比結(jié)果來看mtca算法和本發(fā)明方法,由于記錄重復(fù)數(shù)據(jù),致使兩種方法的運(yùn)行時(shí)間都有所延長(zhǎng)。而mtca方法隨著支持度的降低,算法的運(yùn)行時(shí)間的增長(zhǎng)速度要高于采用本發(fā)明方法。采用本發(fā)明改進(jìn)的方法表現(xiàn)出更穩(wěn)定的特性,無論是在運(yùn)行時(shí)間上還是在隨著支持度計(jì)數(shù)下降、時(shí)間的增長(zhǎng)幅度上,都表現(xiàn)出良好的特性。當(dāng)前第1頁12當(dāng)前第1頁12