本發(fā)明涉及數(shù)據(jù)挖掘技術(shù),尤其涉及一種高效挖掘關(guān)聯(lián)規(guī)則中頻繁項(xiàng)集的方法。
背景技術(shù):
隨著計(jì)算機(jī)的普及應(yīng)用和計(jì)算機(jī)網(wǎng)絡(luò)的飛速發(fā)展,在過(guò)去若干年里,無(wú)論是商業(yè)企業(yè)、科研機(jī)構(gòu)或者政府部門,各個(gè)領(lǐng)域都積累了海量的并以不同形式存儲(chǔ)的數(shù)據(jù)。面對(duì)如此多的數(shù)據(jù),人們不再滿足于日常的事務(wù)處理,而是更加關(guān)注能否從形式不同的,分散的,紛繁復(fù)雜的數(shù)據(jù)環(huán)境中得到有用的決策信息,從而可以做出正確的分析和決策,廣泛的應(yīng)用到商業(yè)、網(wǎng)絡(luò)安全等領(lǐng)域。
關(guān)聯(lián)分析是數(shù)據(jù)挖掘的一項(xiàng)重要研究?jī)?nèi)容。其主要任務(wù)是從事務(wù)數(shù)據(jù)庫(kù)中獲取頻繁項(xiàng),然后再由這些頻繁項(xiàng)生成相應(yīng)的關(guān)聯(lián)規(guī)則。用以發(fā)現(xiàn)隱藏在大量數(shù)據(jù)中的有價(jià)值信息。如今,關(guān)聯(lián)分析在商業(yè)、電信、農(nóng)業(yè)、醫(yī)學(xué)、教育、金融等領(lǐng)域有著廣泛的應(yīng)用。Apriori方法是關(guān)聯(lián)分析的一個(gè)最為經(jīng)典的方法,該方法首先通過(guò)最小支持度來(lái)獲取事務(wù)數(shù)據(jù)庫(kù)中所有的頻繁項(xiàng),然后再通過(guò)最小置信度來(lái)挖掘出關(guān)聯(lián)規(guī)則。其中,頻繁項(xiàng)的獲取是關(guān)聯(lián)規(guī)則挖掘中的關(guān)鍵,其計(jì)算復(fù)雜度決定了整個(gè)挖掘方法的時(shí)間復(fù)雜度,在Apriori方法中,這個(gè)過(guò)程需要頻繁的掃描數(shù)據(jù)庫(kù),因此耗費(fèi)了大量的時(shí)間。
技術(shù)實(shí)現(xiàn)要素:
為了解決以上問(wèn)題,本發(fā)明提出了一種高效挖掘關(guān)聯(lián)規(guī)則中頻繁項(xiàng)集的方法。
一種高效挖掘關(guān)聯(lián)規(guī)則中頻繁項(xiàng)集的方法:
(1)掃描數(shù)據(jù)庫(kù),構(gòu)造二項(xiàng)集的支持度矩陣。分別以項(xiàng)目集合I中的各個(gè)項(xiàng)作為矩陣的行標(biāo)和列標(biāo),用Iik表示項(xiàng)二項(xiàng)集{Ii,Ik}(i≤k)在事務(wù)數(shù)據(jù)庫(kù)D中出現(xiàn)的次數(shù),此矩陣為對(duì)稱矩陣,構(gòu)造的二項(xiàng)集支持度矩陣M如圖1所示:
圖1二項(xiàng)集支持度矩陣
通過(guò)掃描數(shù)據(jù)庫(kù),若掃描到一條事務(wù)中包含{Ii,Ik}項(xiàng),則對(duì)位于矩陣坐標(biāo)[i,k],[i,i],[k,k]中的元素計(jì)數(shù)分別加1。
(2)逐行掃描矩陣,找出該行中不小于最小支持度計(jì)數(shù)的元素Iij,到j(luò)行搜索該行中不小于最小支持度計(jì)數(shù)的元素Ijk,再定位到矩陣Iik中,若Iik不小于最小支持度計(jì)數(shù),則連接生成候選三項(xiàng)集{Ii,Ij,Ik}。方法如下:
輸入:上三角矩陣M,最小支持度計(jì)數(shù)min_supcount
輸出:候選三項(xiàng)集表C3
方法:
(3)由Ck生成候選k+1項(xiàng)集表Ck+1(k≥3),由于生成的候選k項(xiàng)集表Ck是按字典順序排列的。對(duì)于每個(gè)候選k項(xiàng)集X,從X在Ck之后的位置中查找以X后k-1個(gè)項(xiàng)開始的其他候選k項(xiàng)集,若找到這樣一個(gè)候選k項(xiàng)集Y,則把X的第一個(gè)項(xiàng)Ir和Y的最后一個(gè)項(xiàng)Is的標(biāo)號(hào)連接形成矩陣坐標(biāo)[r,s],到矩陣M中查找這個(gè)坐標(biāo)上的值是否大于最小支持度計(jì)數(shù),如果大于或等于,則生成候選k+1項(xiàng)集,如果不大于,則不予連接,繼續(xù)查找下一個(gè),直到Ck中的最后一個(gè)k項(xiàng)集。至此候選k+1項(xiàng)集表構(gòu)造結(jié)束。
(4)第二次掃描數(shù)據(jù)庫(kù),因在生成支持度矩陣時(shí),已經(jīng)產(chǎn)生了頻繁二項(xiàng)集,所以這里只對(duì)生成的候選k項(xiàng)集表Ck(k≥3)中的每個(gè)k項(xiàng)集進(jìn)行計(jì)數(shù)。并對(duì)其進(jìn)行篩選,最后形成頻繁k項(xiàng)集。
本發(fā)明的有益效果是
本發(fā)明通過(guò)支持度矩陣表示數(shù)據(jù)庫(kù)中所有一項(xiàng)集和二項(xiàng)集的支持度,在一定程度上可以減輕內(nèi)存負(fù)擔(dān),減少掃描數(shù)據(jù)庫(kù)次數(shù),通過(guò)生成二項(xiàng)集支持度矩陣避免了產(chǎn)生無(wú)效的二項(xiàng)集,解決了二項(xiàng)集瓶頸的問(wèn)題。同時(shí)利用矩陣的優(yōu)勢(shì)對(duì)連接和剪枝步做了改進(jìn),提高了挖掘頻繁項(xiàng)的效率。
附圖說(shuō)明
圖1是二項(xiàng)集支持度矩陣M示意圖。
具體實(shí)施方式
下面對(duì)本發(fā)明的內(nèi)容進(jìn)行更加詳細(xì)的闡述:
設(shè)有一個(gè)事務(wù)數(shù)據(jù)庫(kù)D={T1,T2,T3,T4,……,Tn},項(xiàng)目集合I={I1,I2,I3,I4……,Im},它是事務(wù)數(shù)據(jù)庫(kù)D中出現(xiàn)的所有數(shù)據(jù)項(xiàng)的集合。其中包含k個(gè)數(shù)據(jù)項(xiàng)的項(xiàng)集稱為k項(xiàng)集。k項(xiàng)集X在事務(wù)數(shù)據(jù)庫(kù)D中的百分比稱為X的支持度。如果此支持度大于或等于用戶設(shè)定的最小閾值(此閾值即為最小支持度),則稱X為頻繁k項(xiàng)集。
Apriori方法:
(1)首先掃描數(shù)據(jù)庫(kù),生成頻繁一項(xiàng)集,構(gòu)建頻繁一項(xiàng)集表L1。
(2)由L1中的頻繁一項(xiàng)集相互連接生成候選二項(xiàng)集,生成候選二項(xiàng)集表C2。
(3)第二次掃描數(shù)據(jù)庫(kù),對(duì)C2中的二項(xiàng)集進(jìn)行計(jì)數(shù),找出其中大于最小支持度的二項(xiàng)集,生成頻繁二項(xiàng)集表L2。
(4)由L2中的頻繁二項(xiàng)集連接生產(chǎn)三項(xiàng)集,并根據(jù)性質(zhì):一個(gè)非頻繁項(xiàng)的所有的超集都是非頻繁的。對(duì)這些生成的三項(xiàng)集進(jìn)行剪枝:如果生成的某三項(xiàng)集中只要有一個(gè)子集不在L2中,那么就把此三項(xiàng)集刪除,最后由未經(jīng)刪除的三項(xiàng)集組成候選三項(xiàng)集表C3。
(5)第三次掃描數(shù)據(jù)庫(kù),對(duì)C3中的三項(xiàng)集進(jìn)行計(jì)數(shù),找出大于最小支持度的三項(xiàng)集,生成頻繁三項(xiàng)集表L3。這樣依次由頻繁k項(xiàng)集表生成頻繁k+1項(xiàng)集表,直至不能生成更高維的頻繁項(xiàng)集為止。
Apriori方法的有以下幾個(gè)缺點(diǎn):
①需要頻繁的掃描數(shù)據(jù)庫(kù),這對(duì)我們經(jīng)常遇到的海量數(shù)據(jù)庫(kù)以及平均事務(wù)寬度很長(zhǎng)的數(shù)據(jù)庫(kù)來(lái)說(shuō),這個(gè)I/O開銷是非常大的。
②生成了大量的候選二項(xiàng)集,產(chǎn)生了二項(xiàng)集瓶頸問(wèn)題,其中有許多是無(wú)效的二項(xiàng)集。這樣不但占用了較多的空間,而且增加了步驟(3)的工作量。
③在生成的每一個(gè)候選三項(xiàng)集時(shí)的連接和剪枝階段都要多次對(duì)L2進(jìn)行掃描,且搜索空間較大,效率較低。
一種高效挖掘關(guān)聯(lián)規(guī)則中頻繁項(xiàng)集的方法--Apriori-M方法:
(1)掃描數(shù)據(jù)庫(kù),構(gòu)造二項(xiàng)集的支持度矩陣。分別以項(xiàng)目集合I中的各個(gè)項(xiàng)作為矩陣的行標(biāo)和列標(biāo),用Iik表示項(xiàng)二項(xiàng)集{Ii,Ik}(i≤k)在事務(wù)數(shù)據(jù)庫(kù)D中出現(xiàn)的次數(shù),此矩陣為對(duì)稱矩陣,構(gòu)造的二項(xiàng)集支持度矩陣M如圖1所示:
通過(guò)掃描數(shù)據(jù)庫(kù),若掃描到一條事務(wù)中包含{Ii,Ik}項(xiàng),則對(duì)位于矩陣坐標(biāo)[i,k],[i,i],[k,k]中的元素計(jì)數(shù)分別加1。
(2)逐行掃描矩陣,找出該行中不小于最小支持度計(jì)數(shù)的元素Iij,到j(luò)行搜索該行中不小于最小支持度計(jì)數(shù)的元素Ijk,再定位到矩陣Iik中,若Iik不小于最小支持度計(jì)數(shù),則連接生成候選三項(xiàng)集{Ii,Ij,Ik}。如下:
輸入:上三角矩陣M,最小支持度計(jì)數(shù)min_supcount
輸出:候選三項(xiàng)集表C3
方法:
(3)由Ck生成候選k+1項(xiàng)集表Ck+1(k≥3),由于生成的候選k項(xiàng)集表Ck是按字典順序排列的。對(duì)于每個(gè)候選k項(xiàng)集X,從X在Ck之后的位置中查找以X后k-1個(gè)項(xiàng)開始的其他候選k項(xiàng)集,若找到這樣一個(gè)候選k項(xiàng)集Y,則把X的第一個(gè)項(xiàng)Ir和Y的最后一個(gè)項(xiàng)Is的標(biāo)號(hào)連接形成矩陣坐標(biāo)[r,s],到矩陣M中查找這個(gè)坐標(biāo)上的值是否大于最小支持度計(jì)數(shù),如果大于或等于,則生成候選k+1項(xiàng)集,如果不大于,則不予連接,繼續(xù)查找下一個(gè),直到Ck中的最后一個(gè)k項(xiàng)集。至此候選k+1項(xiàng)集表構(gòu)造結(jié)束。
(4)第二次掃描數(shù)據(jù)庫(kù),因在生成支持度矩陣時(shí),已經(jīng)產(chǎn)生了頻繁二項(xiàng)集,所以這里只對(duì)生成的候選k項(xiàng)集表Ck(k≥3)中的每個(gè)k項(xiàng)集進(jìn)行計(jì)數(shù)。并對(duì)其進(jìn)行篩選,最后形成頻繁k項(xiàng)集。值得注意的是有許多改進(jìn)方法對(duì)生成的對(duì)角矩陣進(jìn)行深度遍歷,這樣能更好的提高獲取最高維頻繁項(xiàng)的連接效率,但是卻不能及時(shí)的進(jìn)行剪枝,極有可能會(huì)造成許多連接的浪費(fèi),此外,它實(shí)際上只生成了候選頻繁項(xiàng)集表,但并沒有對(duì)數(shù)據(jù)庫(kù)進(jìn)行第二次掃描,對(duì)其中的候選項(xiàng)集進(jìn)行驗(yàn)證,這樣就很有可能將非頻繁k項(xiàng)集劃為頻繁k項(xiàng)集,如考慮由表1所示的數(shù)據(jù)庫(kù)D1這種情況:
表1數(shù)據(jù)庫(kù)D1
設(shè)最小支持度計(jì)數(shù)是2,則會(huì)有頻繁二項(xiàng)集{a,b}{b,c}{a,c},按照此方法的做法,會(huì)生成頻繁三項(xiàng)集{a,b,c}。但是三項(xiàng)集{a,b,c}并不在數(shù)據(jù)庫(kù)中。所以應(yīng)該對(duì)數(shù)據(jù)庫(kù)進(jìn)行第二次掃描,以避免這種錯(cuò)誤。
通過(guò)實(shí)驗(yàn)結(jié)果可以看出:無(wú)論是在不同的數(shù)據(jù)規(guī)模上還是在不同的最小支持度的情況下Apriori-M的在時(shí)間上的耗費(fèi)比Apriori要小,而且隨著數(shù)據(jù)庫(kù)的增大,這種優(yōu)勢(shì)會(huì)更加明顯,因而更加適合大型數(shù)據(jù)庫(kù)關(guān)聯(lián)規(guī)則的挖掘。通過(guò)對(duì)本發(fā)明提出的Apriori-M方法分析,我們可以看出:
第一,該發(fā)明減少了對(duì)數(shù)據(jù)庫(kù)的掃描次數(shù),當(dāng)頻繁項(xiàng)的最高維數(shù)是k時(shí),Apriori方法需要掃描k次數(shù)據(jù)庫(kù)才能挖掘出所有的頻繁項(xiàng),而本方法,在保證不會(huì)錯(cuò)誤的獲取k項(xiàng)集時(shí),僅需掃描數(shù)據(jù)庫(kù)兩次,就能挖掘出所有的頻繁項(xiàng)集,減少了I/O花銷。
第二,充分利用矩陣的性質(zhì),進(jìn)行連接時(shí),只到特定的行中搜索頻繁二項(xiàng)集,搜索空間要遠(yuǎn)比在Lk小,而且由于這是一個(gè)上三角矩陣,隨著連接過(guò)程的深入,所要搜索的空間會(huì)越來(lái)越小。因此可以比Apriori方法中的連接步節(jié)省更多的時(shí)間,進(jìn)行剪枝時(shí),則只需定位到矩陣特定的坐標(biāo)中,根據(jù)其元素的值來(lái)決定是否剪枝,大大提高了剪枝效率。