摘 要:針對相關算法在處理頻繁項集更新時所存在的問題,提出了一種基于矩陣的頻繁項集更新算法。該算法首先以時間為基準將更新后的數據庫分為原數據庫和新增數據庫,分別將它們轉換為0-1矩陣,通過矩陣裁剪、位運算產生新增頻繁項集,并利用已有頻繁項集更新原有頻繁項集。實驗仿真結果不但證明了該算法的可行性和高效性,而且還證明了它適合大型、稠密性數據庫的頻繁項集更新。
關鍵詞:數據挖掘; 關聯規則; 頻繁項集; 更新
中圖分類號:TP311 文獻標志碼:A
文章編號:1001-3695(2010)03-0837-04
doi:10.3969/j.issn.1001-3695.2010.03.008
Updating algorithm based on matrix for mining frequent item sets
XU Jia-li1, CHEN Jia2
(1.School of Electronic Information Engineering, Chengdu University, Chengdu 610106, China; 2.School of Computer Science Enginee-ring, University of Electronic Science Technology of China, Chengdu 610054, China)
Abstract:Aiming at updating problems of frequent item sets, this paper proposed an updating algorithm based on matrix(UABM) for mining frequent item sets.Divided the updated database into original database and new one based on time. Converted these databases into matrixes.Got the new frequent sets by matrix cropping and the bit operation, and updated the gotten frequent item sets on gotten ones.The experiments show the algorithm is not only feasible and efficient but also fit to update freguent item sets for a large-scale and dense data base.
Key words:data mining; association rules; frequent item sets; updating
關聯規則挖掘是數據挖掘領域中的一個重要研究課題,Agrawal等人于1993年提出挖掘顧客交易數據庫中項集間的關聯規則問題后,至今已有很多高效的關聯規則挖掘算法[1~5],但這些算法大多針對靜態數據和固定的最小支持度。而在實際的挖掘過程中,用戶往往需要對最小支持度進行不斷調整來尋找真正感興趣的規則;另一方面事務數據庫的數據隨時間而變化,如在線提供的實時服務、大型商場的購物清單所提供的數據都是動態變化的,這些使得當前已發現的關聯規則可能不再有效,也可能還存在新的有效規則有待進一步發現。因此,有必要設計高效的算法來更新維護已挖掘出的關聯規則。
關聯規則挖掘分兩步:產生頻繁項集;對每個頻繁項集產生所有大于最小置信度的規則。由于第二步相對較易,關聯規則挖掘的研究重點放在了第一步,同樣地,關聯規則的更新重點也就轉為頻繁項集的更新。頻繁項集的更新一般分為三種:a)最小支持度不變、數據庫記錄數發生變化;b)最小支持度發生變化、數據庫記錄數不變;c)最小支持度、數據庫記錄數都發生變化。
目前已有一些典型的頻繁項集更新算法出現。FUP[6]、IFUP[7]都是在最小支持度給定的情況下,當數據庫記錄數發生變化時,在新增事務中尋找頻繁項集,然后結合已有頻繁項集挖掘出新的頻繁項集。雖然它們在挖掘過程中利用已有知識避免原有頻繁項集的重復挖掘,在一定程度上提高了算法的效率,但由于它們都是基于Apriori框架的,需要多次掃描數據庫并產生龐大的候選項集,其效率并沒有得到充分的提高。IUA[8]則是針對頻繁項集更新的第二種情況,由于它仍然基于Apriori框架,仍然需要多次掃描數據庫并產生龐大的候選項集。人們對第三種情況的研究很少,基于FP-tree的IM[9]算法雖然可以處理這種情況,但是該算法采用復雜的數據結構FP-tree,需進行復雜的操作,算法過程需要龐大的存儲空間。
本文提出了一種基于矩陣的頻繁項集更新算法(UABM)。該算法不但能處理數據庫記錄數增大而最小支持度不變、數據庫記錄數不變而最小支持度改變以及數據庫記錄數增大而最小支持度也改變等條件下的頻繁項集更新,而且還避免了對原數據庫中已有頻繁項集的重復挖掘,并且擺脫了Apriori框架的束縛,只需掃描一遍數據庫、不產生龐大的候選項集;在挖掘過程中對矩陣進行有效的裁剪還能減少空間和時間的開銷。
1 相關定義與性質
數據庫D是事務的集合,即D={T1,T2,…,Tm},每個事務T是項的集合,項集合I={I1,I2,…,In}。定義變量i、j,其取值范圍分別為1≤i≤m,1≤j≤n,則有以下定義:由于定義描述中數學符號較多,為了便于讀者閱讀,定義1~3用表格的形式進行描述,如表1所示。
表1 定義1~3的描述
定義項集向量表示支持數
定義11-項集{Ij}Aj=(a1j, a2j,…,amj)T∑mi=1
aij,當IjTi時,aij=0;當Ij∈Ti時,aij=1
定義22-項集{Ii,Ij}Aij=Ai∧Aj=(a1i∧a1j, a2i∧a2j,…,ami∧amj)T∑mk=1(aki∧akj)
定義3k-項集{Ii1,Ii2,…,Iik}Ai1i2…ik=Ai1∧Ai2∧…∧Aik∑mq=1(aqi1∧aqi2∧…∧aqik其中1≤ik≤n
定義4 D的布爾矩陣記為
A=012…n
ai0A1A2…An
0a(m+1)1a(m+1)2…a(m+1)n
其中:A的下標從0開始,a0j(1≤j≤n)代表項Ij的ID號j,a(m+1)j(1≤j≤n)為項Ij的支持數,ai0(1≤i≤m)為事務Ti包含的項數。
性質1 頻繁k-項集存在的判定方法。如果k-項集{Ii1,Ii2,…,Iik}的支持數不小于最小支持數,則{Ii1,Ii2,…,Iik}就是頻繁k-項集。
性質2 設Lk為k-頻繁項集,若TI,T的支持數|T|=k,則求k+1維支持度時可以從布爾矩陣中刪除事務T。
證明 由布爾“與”運算的性質知,僅當參加“與”運算的元素的值全為1時,運算結果才為1。所以當T中包含項的數目小于k+1時,T的元素值至少有一個為0。因而k-項集對于生成頻繁(k+1)-項集是沒有用的,所以在求(k+1)項集的支持度時,可以刪除布爾矩陣中項的數目等于k的行。
性質3 設Xk是k-項集,如果所有(k-1)-頻繁項集Xk-1中包含Xk的(k-1)-項集的個數小于k,則Xk不可能是k維最大頻繁項集[10]。
設D由n個子集D1,D2,…,Dn構成,D1,D2,…,Dn分別對應n段連續時間間隔下所挖掘的事務集;|D|、|Di|分別為D、Di(i=1,2,…,n)中事務的總數;s為原最小支持度,s′為新的最小支持度;LD和LKD分別為s條件下的所有維頻集的集合和k(k=1,2,…,n′1)維頻集;LD-new和LkD-new分別為s′條件下所有維頻集的集合和k(k=1,2,…,n′1)維頻集。則有以下性質:
性質4 項集I在n個時段都為頻繁項集,則它在全時段必為頻繁項集。
性質5 項集I只要在其中一個時段不為頻繁項集,則它在全時段就不一定為頻繁項集。
性質6 若項集I是全局頻繁項集,則它至少在其中一個時段局部頻繁。
證明 假設I在任意時段上都不頻繁,即|I|D1
性質7 如果s>s′,則LkDLkD-new,LDLD-new,且n1≤n′1;如果s
證明 對于任意I∈LkD,有|I|D/|D|≥s。如果s>s′,則|I|D/|D|≥s′,即I∈LkD-new,故有LkDLkD-new成立,從而推得LDLD-new和n1≤n′1成立。同樣,對于任意I∈LkD-new,有|I|D/|D|≥s′。如果s
2 相關子算法
2.1 矩陣生成算法
設D={T1,T2,…,Tm},項集I={I1,I2,…,In},由定義1、4可構造布爾矩陣A(m+2)×(n+1)。其算法核心如下:
//矩陣生成算法
a[0][0]=0; a[m+1][0]=0;
for (j=1;j<=n;j++)
{a[0][j]=j;// 填充各項的ID號
a[m+1][j]=0;}
for(i=1;i<=m;i++)
{a[i][0]=0;
for(j=1;j<=n;j++)
{ //如果Ij在Ti中存在,則a[i][j]為1,否則為0
if(Ij in Ti){ a[i][j]=1;
a[i][0]++;//統計事務Ti包含項的個數
a[m+1][j]++;//統計項Ij的支持記數 }
else a[i][j]=0;} }
2.2 矩陣壓縮算法
已知s, 矩陣A(m+2)×(n+1)。其中m代表事務數,n代表項數,則矩陣壓縮算法的核心如下:
min_sup_num=s*m;//最小支持記數min_sup_num
do{// 刪除不符合條件的列
for(j=1;j<=n;j++)
{ifa[m+1][j]< min_sup_num
{ for(i=1;i<=m;i++)
if(Ij in Ti)a[i][0]--;// 修改第0列中各元素值
delete 第j列 //由性質1、3;
}}
forall Ij∈Lk-1 // Lk-1為頻繁(k-1)-項集
ifIj在頻繁(k-1)-項集中出現的次數小于(k-1)
{ for(i=1;i<=m;i++)
if(Ij in Ti)a[i][0]--;
deletej列;//由性質3
}
//刪除不符合條件的行
for(i=1;i<=m;i++)
ifa[i][0] { for(j=1;j<=n;j++) if(Ij in Ti)a[m+1][j]--;// 修改第m+1行各元素值 delete 第i行 //由性質2,刪除第0列中值小于k的元素所對應的行;} }while 無行、列可刪除。 2.3 頻繁k-項集生成算法 當k>1時,若矩陣經裁剪后為Ar×p(k Lk=;min_sup_num=s*m;//m為D中的事務數 for(x=0;x { M=; sup_num=0;//k-項集支持數sup_num初值為0 for(i=1;i { w=1; for(j=0;j { for(b=1;b if B[x][j]=a[0][b]break; w=w*a[i][b];//“與”運算 if (w==O)break;} sup_num= sup_num +w;// 計算k-項集支持數 } if sup_num >=min_sup_num//求k-頻繁項集 {for(j=0;j {t=B[x][j]; M=M∪{it}; } Lk= Lk∪M;}} 2.4 頻繁k-項集更新算法 當k>1時,若矩陣經裁剪后為Ar×p(k min_sup_num=s*m; 從Bs×(k+1)中刪除原頻繁k-項集所對應的組合對,得到Bf×(k+1); for(x=0;x {M=; sup_num=0;//k-項集支持數初值為0 for(i=1;i { w=1; for(j=0;j { for(b=1;b if B[x][j]=a[0][b]break; w=w*a[i][b];//“與”運算 if (w==O)break;} sup_num= sup_num +w;// 計算k-項集支持數 } if sup_num >=min_sup_num//求k-頻繁項集 { for(j=0;j { t= B[x][j]; M=M∪{it }; } Lk= Lk∪M;}} 3 UABM算法思想 UABM將更新后的數據庫從物理上分為兩個完全獨立的數據庫分別進行處理[6,7,11],而不是將數據庫從邏輯上劃分成互不相交的塊。這主要是因為后者雖然具有只需把所處理的分塊放入主存、減輕內存需求并為算法的并行處理提供可能的優點,但由于這些分割的塊仍然屬于同一個數據庫,算法的并行程度不如前者高,算法的效率也較前者低。 UABM以時間為基準劃分數據庫,比如在2009年3月10日10點設置時間間隔為15天,則2009年3月10日10點以前的數據庫記為原數據庫DB;在2009年3月10日10點后的15天內新增的事務構成新增數據庫db。顯然DB和db的數據庫模式是同構的。為了滿足實際挖掘環境中用戶對響應時間的需求,當用戶設置的時間間隔一滿足或最小支持度一旦發生變化,UABM就會自動運行,以更新維護頻繁項集。 記DB的事務總數為|DB|,頻繁k-項集為LkDB;db的事務總數為|db|,頻繁k-項集為Lkdb;s為原最小支持度,s′為新最小支持度;在s′條件下,DB中的頻繁k-項集為LkDB-new;更新后的數據庫記為DB+db,其事務總數為|DB+db|,頻繁k-項集為LkDB+db,則UABM算法核心描述如下: 輸入:DB,LkDB,db,s,s′ 輸出:LkDB+db a)生成db的Lkdb。 if|db|==0 Lkdb=//數據庫記錄數不變的情況 else { 調用矩陣生成算法構造Adb; 調用矩陣壓縮算法對Adb進行壓縮生成Akdb; 調用頻繁k-項集生成算法得到Lkdb } b)更新DB的頻繁k-項集。 if s=s′ LkDB-new=LkDB; elseifs else { //由性質6、7調用矩陣生成算法生成ADB; 產生新的頻繁k-項集LkDB-new(k≥2): ifLkDB≠LkDB-new=LkDB; else LkDB-new =; 調用矩陣壓縮算法生成AkDB; 調用頻繁k-項集更新算法產生新增的頻繁k-項集,并添加到LkDB-new中} c)當LkDB-new≠ or Lkdb≠時,將LkDB-new與Lkdb中的項集I進行比較(k≥1),產生LkDB+db。 if項集I在DB中為k-頻繁項集 if 項集I在db中為k-頻繁項集 {LkDB+db=LkDB+db+I;|I|DB+db=|I|DB+|I|db//性質4} else{ //性質5 從Bkdb中I所在行最后一個元素得|I|db; if |I|DB+|I|db >=s′×|DB+db| LkDB+db=LkDB+db+I} elseifI在db中是k-頻繁項集 {//性質5 由BkDB中I所在行最后一個元素得到|I|DB; if|I|DB+|I|db>=s′×|DB+db| LkDB+db=LkDB+db+I} 4 算法實現 4.1 實例分析 本文僅分析數據庫記錄數增加、最小支持度變小的情況。 假設在2009年3月10日10點設置時間間隔為15天,則在2009年3月10日10點以后的15天內新增的事務構成db,如圖1所示,|db|=5;2009年3月10日10點以前的數據庫記為DB,如圖2所示,|DB|=10;s為20%,s′為10%;DB中原最小支持數為20%×10=2,新的最小支持數為10%×10=1。而db中新的最小支持數為10%×5=0.5,DB+db中的最小支持數為10%×(10+5)=1.5。 1)求Lkdb 如圖1所示,當s′為10%時,調用矩陣生成算法生成Adb;假設求頻繁2-項集,調用矩陣壓縮算法將Adb轉換成A2db。調用頻繁k-項集生成算法生成L2db={{1,2},{1,4}, {1,5},{2,4},{2,5},{4,5},{4,6}}。同理,生成L3db= {{1,2,4},{1,2,5},{1,4,5},{2,4,5}};L4db={{1,2,4,5},|L4db|=1<4,該子算法結束。相關矩陣及數組如圖1所示。 2)求LkDB-new 對于DB,當s為20%時,已知L2DB={{1,2},{1,3}, {1,4},{1,5},{2,3},{2,4},{2,5}}、L3DB={{1,2,3}, {1,2,4}, {1,2,5}}。而當s′變為10%時, a)產生L2DB-new(一般不求頻繁1-項集,因此省略)。由性質7得L2DB-new={{1,2},{1,3},{1,4},{1,5},{2,3},{2,4},{2,5}}。調用矩陣壓縮算法將ADB轉換為A2DB,調用頻繁k-項集更新算法得到新增的頻繁2-項集{1,6}、{3,6}、{3,4}、{3,5}、{3,6}和{4,5},將它們添加到L2DB-new中,即L2DB-new={{1,2},{1,3},{1,4},{1,5},{1,6},{2,3},{2,4},{2,5},{3,4},{3,5},{3,6},{4,5}}。 b)產生L3DB-new。由性質7得L3DB-new={{1,2,3}, {1,2,4},{1,2,5}}。調用矩陣壓縮算法將ADB轉換為A3DB,調用頻繁k-項集更新算法得到新增的頻繁3-項集{1,4,5}、{2,3,5},將它們添加到L3DB-new中,即L3DB-new={{1,2,3},{1,2,4},{1,2,5},{1,4,5},{2,3,5}}。 由于|L3DB-new|=5>3,還應該有頻繁4-項集[10],調用矩陣壓縮算法將A3DB轉換為A4DB。調用頻繁k-項集生成算法得到頻繁4-項集L4DB-new={{1,2,3,4}}。由于|L4DB-new|=1<4,DB中最大頻繁項集的次數為4,該子算法結束。 3)將LkDB-new與Lkdb中的項集進行比較,產生LkDB+db a)求L2DB+db。由于{1,2}、{1,4}、{1,5}、{2,4}、{2,5}、{4,5}均在L2DB-new、L2db中,有L2DB+db={{1,2},{1,4},{1,5},{2,4},{2,5},{4,5}}。{1,3}僅屬于L2DB-new,{1,3}是否為全局頻繁項集取決于|{1,3}|DB+db=|{1,3}|DB+|{1,3}|db ≥s′×|DB+db|是否成立。查B2DB、B2db可知,|{1,3}|DB+db=5≥1.5,所以{1,3}為全局頻繁項集;同理,{2,3}也為全局頻繁項集。而|{1,6}|DB+db=1<1.5,因此,它不是全局頻繁項集;同理,{3,4}、{3,5}、{3,6},{4,6}均不是全局頻繁項集。因此L2DB+db={{1,2},{1,4},{1,3},{1,5},{2,3},{2,4},{2,5},{4,5}}。 b)求L3DB+db。由于{1,2,4},{1,2,5},{1,4,5}均在L3DB-new、L3db中,有L3DB+db={{1,2,4},{1,2,5},{1,4,5}}。{1,2,3}僅屬于L3DB-new,所以{1,2,3}是否為全局頻繁項集取決于|{1,2,3}|DB+db=|{1,2,3}|DB+|{1,2,3}|db≥s′×|DB+db|是否成立。查B3DB和B3db可知,|{1,2,3}|DB+db=2≥1.5,所以{1,2,3}為全局頻繁項集。而|{2,3,5}|DB+db=1<1.5,因此,{2,3,5}不是全局頻繁項集;同理,{2,4,5}也不是全局頻繁項集。因此L3DB+db={{1,2,3}、{1,2,4}、{1,2,5}、{1,4,5}}。 c)求L4DB+db。由于{1,2,3,5}僅屬于L4DB-new且|{1,2,3,5}|DB+db=1<1.5,{1,2,3,5}不為全局頻繁項集;同理,{1,2,4,5}也不為全局頻繁項集,因此L4DB+db=。算法結束。 結合UABM的算法思想和本實例可以看出: a)UABM算法以時間為基準,將更新后的數據庫分為原數據庫DB和新增數據庫db(數據庫不變的情況下,db為空),無論支持度怎樣變化,都可分別挖掘出DB和db的頻繁k-項集,然后再從中挖掘DB+db的頻繁k-項集。這樣就可以靈活處理最小支持度不變而數據庫記錄數增大、最小支持度發生變化而數據庫記錄數不變以及最小支持度改變而數據庫記錄數也增大的多種情況下頻繁項集的更新,不像FUP、IUA算法只能處理頻繁項集更新的單一情況。 b)在求LkDB-new時,當s c)UABM采用位運算的思想產生頻繁k-項集,只需掃描數據庫一次且不產生龐大的候選項集,避免了Apriori算法存在的處理大量候選項集和重復掃描數據庫的問題;在挖掘過程中對矩陣進行裁剪,極大地減少了求高次頻繁項集的運算時間;跨越了由低次到高次逐步查找頻繁子集的限制,在不知低次k-1頻繁項的前提下同樣可以直接計算頻繁k-項集,而且k越大,搜索的矩陣范圍越小。這與基于Apriori的FUP、IUA算法相比,避免了大量不必要的比較和計算。 d)UABM算法在挖掘過程中采用數組結構和位運算操作,相比IM算法要保存龐大的FP-tree、頭鏈表、條件基等信息,節省了大量的存儲空間。 4.2 實驗仿真 為了進一步證明UABM算法的正確性和有效性,筆者在WindowsXP(Intel Pentium M Processor 1.73 GHz、內存為1 GB)平臺上、SQL Server 2000和Delphi 7.0的環境下實現了Apriori算法、FUP算法、IUA算法和UABM算法,交易數據庫由數據項集{A,B,…,Z}中以隨機方式產生任意長度(1~6)的數據項的100 000條交易記錄組成。實驗結果表明,在最小支持度改變而數據庫大小不變、最小支持度不變而數據庫大小改變、最小支持度和數據庫大小都改變這三種情況下,分別運行UABM算法與Apriori算法,兩者所得的頻繁項集完全相同,這說明UABM算法是正確的。 圖3是在測試數據庫記錄數不變、最小支持度在20%~80%變化時,IUA和UABM算法的執行時間情況對比。由圖3可知,當支持度在0.2~0.6變化時,UABM算法的執行速度比IUA算法快。這是因為UABM算法通過矩陣裁剪、位運算產生頻繁項集,僅需掃描數據庫一次且不產生龐大的候選項集,其效率比基于Apriori框架的IUA高。當支持度為0.2時,數據庫中的頻繁項集數目最大,UABM的這一優勢更加突出,因而其執行時間與IUA的執行時間相差也最大。因此,UABM更適合稠密型數據庫的頻繁項集更新。 圖4是在最小支持度不變、測試數據庫記錄數發生改變時,FUP和UABM算法的執行時間情況對比。從圖4可以看出,當測試數據庫變大時,UABM執行時間的增長速度遠小于FUP。這主要是因為,雖然UABM和FUP都是將新增事務單獨組成新增數據庫進行處理,但是后者基于Apriori框架,需要多次掃描數據庫、產生龐大的候選項集并需要更大的存儲空間;而前者將事務數據庫表示成矩陣,通過矩陣裁剪、位運算產生頻繁項集,既不需要產生龐大的候選項集,也不需要龐大的存儲空間且僅需掃描數據庫一次。因而前者的運行效率較后者高,其執行時間的增長速度遠小于后者。因此,UABM算法比FUP更適合大型數據庫的頻繁項集更新。 5 結束語 UABM算法首先以時間為基準劃分新、舊數據庫,然后通過矩陣裁剪、向量運算更新維護頻繁項集。它不僅能處理多種條件組合下的頻繁項集更新維護,而且只需掃描一遍數據庫且不產生候選項集,與其他同類算法[6~9]相比,UABM具有較高的效率。 由于UABM算法在更新或生成頻繁k-項集時,需要對數組B中的組合對求k維支持數,隨著數據庫事務數量的增大,求k維支持數的時間開銷也將增大。在求k維支持數之前,能否利用Apriori算法的性質剪掉B中不可能成為頻繁項集的組合對,以減少求k維支持數的時間開銷,進一步提高UABM算法的效率,這將是下一步要研究的問題。 參考文獻: [1]AGRAWAL R,IMIELINSKI T,SWAMI A. Mining association rules between sets of items in large databases[C]//Proc of ACM SIGMOD International Conference on Management of Data. New York:ACM Press, 1993:207-216. [2]AGRAWAL R,SRIKANT R. Fast algorithm for mining association rules[C]//Proc of the 20th International Conference on VLDB. Santiago Chile:[s,n],1994:487-499. [3]HAN J,KAMBER M. Data mining:concepts and techniques[M].Beijing:Higher Education Press, 2001:123-140. [4]HAN Jia-wei, PEI Jian, YIN Yi-wen. Mining frequent patterns without candidate generation:a frequent-pattern tree approach[J].Data Mining and Knowledge Discovery, 2004,8(1):53-87. [5]WANG Jian-yong, Han J, LU Y,et al. An efficient algorithm for mining top-k frequent closed itemsets[J].IEEE Trans on Know-ledge and Data Engineering, 2005,17(5):652-663. [6]CHEUNG D W,HAN Jia-wei,NG V, et al.Maintenance of discovered association rules in large database: an incremental updating technique[C]//Proc of the 12th International Conference on Data Engineering. New Orleans:IEEE Computer Society, 1996:106-114. [7]朱紅蕾,李明.一種高效維護關聯規則的增量算法[J].計算機應用研究,2004,21(9):107-109. [8]馮玉才,馮劍琳.關聯規則的增量式更新算法[J].軟件學報,1998,9(4):301-306. [9]MA Xiu-li,TONG Yun-hai,TANG Shi-wei,et al. Efficient incremental maintenance of frequent patterns with FP-tree[J]. Journal of Computer Science and Technology, 2004,19(6):876-884. [10]張素蘭. 一種基于事務壓縮的關聯規則優化算法[J].計算機工程與設計,2006,27(18):3450-3453. [11]李廣原,雷鴻,龍瓏. 一種新的動態頻繁項集挖掘方法[J].計算機工程與應用,2008,44(21):209-211.s′時,利用性質7,將LkDB-new的初值定為LkDB,然后對矩陣進行裁剪。對裁剪后的矩陣Ar×p(k