關聯規則挖掘算法研究

關聯規則挖掘算法研究

楊光  王瑞
(大連交通大學 軟件學院, 116028)
 
    摘 要 Apriori算法是發現頻繁項目集的經典算法,但是該算法需反覆掃描數據庫,因此效率較低。本文介紹了Apriori算法的思想,並分析了該算法的性能瓶頸。在此基礎上,針對Apriori算法提出了一種改進方法,該方法採用轉置矩陣的策略,只掃描一次數據庫即可完成所有頻繁項目集的發現。與其他經典的算法相比,本文提出的算法在項目集長度較大時,性能明顯提高。
    關鍵字 關聯規則,支持度,置信度,Apriori
 

1 引言

    關聯規則挖掘就是在海量的數據中發現數據項之間的關係,是數據挖掘領域中研究的熱點問題。1993年Agrawal等人[1]首先提出了交易數據庫中不同商品之間的關聯規則挖掘,並逐漸引起了專家、學者的重視。關聯規則挖掘問題可以分爲:發現頻繁項目集和生成關聯規則兩個子問題,其中發現所有的頻繁項目集是生成關聯規則的基礎。近年來,發現頻繁項目集成爲了關聯規則挖掘算法研究的重點,在經典的Apriori算法的基礎上提出裏大量的改進算法。Savasere等[2]設計了基於劃分(partition)的算法,該算法可以高度並行計算,但是進程之間的通信是算法執行時間的主要瓶頸;Park等[3]通過實驗發現尋找頻集主要的計算是在生成頻繁2-項集上,利用這個性質Park等引入雜湊(Hash)技術來改進產生頻繁2-項集的方法,該算法顯著的提高了頻繁2-項集的發現效率;Mannila等[4]提出:基於前一遍掃描得到的信息,對此仔細地作組合分析,可以得到一個改進的算法了。針對Mannila的思想Toivonen[5]進一步提出:先使用從數據庫中抽取出來的採樣得到一些在整個數據庫中可能成立的規則,然後對數據庫的剩餘部分驗證這個結果。Toivonen的算法相當簡單並顯著地減少了I/O代價,但是一個很大的缺點就是產生的結果不精確,存在數據扭曲(data skew)。
    上述針對經典Apriori算法的改進算法在生成頻繁項目集時都需要多次掃描數據庫,沒有顯著的減少I/O的代價。本文在分析了經典的Apriori算法的基礎上,給出了一種改進的方法,該方法採用轉置矩陣的策略,只掃描一次數據庫即完成頻繁項目集的發現,在項目集長度較大時,性能明顯提高。

2  Apriori算法

2.1 基本概念

    設I={i1, i2,…, im}是二進制文字的集合,其中的元素稱爲項(item)。定義交易(transaction)T爲項的集合,並且TÍI,定義D爲交易T的集合。設X是I中若干項的集合,如果XÍT,那麼稱交易T包含X。項目集中包含項的個數成爲項目集長度。
    關聯規則是形如XÞY的蘊涵式,這裏XÌI, YÌI,並且XÇY=F。
    規則XÞY在交易數據庫D中的支持度(support)是交易集合中包含X和Y的交易數與所有交易數之比,記爲support(XÞY),即support(XÞY)=|{T:XÈYÍT,TÎD}|/|D|。
    規則XÞY在交易集中的置信度(confidence)是指包含X和Y的交易數與包含X的交易數之比,記爲confidence(XÞY),即confidence(XÞY)=|{T: XÈYÍT,TÎD}|/|{T:XÍT,TÎD}|。給定一個交易集D,挖掘關聯規則就是找出支持度和置信度分別大於用戶給定的最小支持度(minsup)和最小置信度(minconf)的關聯規則。

2.2 基本思想

    1994年Agrawal等人在項目集格空間理論的基礎上提出了用於發現頻繁項目集的Apriori算法。該算法採用“逐層搜索”的迭代方法,用k-項集生成(k+1)-項集。首先,掃描數據庫計算出頻繁1-項集的集合(記爲:L1);然後,執行下面的迭代過程計算頻繁k-項集,直到生成頻繁k-項集的集合(記爲:Lk)爲空:
    ①連接:Lk-1進行自連接運算,生成候選k-項集的集合(記爲:C k)。所有的頻繁k-項集都包含在C k集合中。
    ②剪枝:①生成的C k是Lk的超集,掃描數據庫計算C k中每個候選項目集的支持度,支持度大於用戶給定最小支持度的候選k-項目集就是頻繁k-項目集。
    通過上述的迭代過程,可以發現項目集I在給定數據庫D中滿足最小支持度的所有頻繁項目集。

2.3 算法分析

    Apriori算法在執行“連接-剪枝”的迭代過程中,需要多次掃描數據庫,如果生成的頻繁項目集中含有10-項集,則需要掃描10遍數據庫,增大了I/O負載。並且在迭代過程中,候選項目集合Ck是以指數速度增長的,Lk-1自連接會產生大量的候選k-項目集,例如有104個1-項集,自連接後就可以產生大約107個候選2-項集。這些都嚴重影響了Apriori算法的效率。

3 改進的Apriori算法

3.1 改進思想

    Apriori算法在迭代過程中多次掃描數據庫和產生大量的候選項目集形成了算法的性能瓶頸。爲了提高算法的效率本文進行如下改進:
    數據庫D中每個交易T都有一個唯一的編號TID。定義K-項集Rk=<Xk,TIDS(Xk)>,其中Xk=(ij1, ij2, …, ijk),ij1, ij2, …, ijk ÎI,j1<j2< …<jk,TIDS(Xk)是數據庫中所有包含Xk的交易T的編號TID的集合,即爲:TIDS(Xk)={TID : XkÍT,<TID,T> ÎD}。根據上面的定義k-項目集Rk的支持度可以表示爲:support(Rk)=|TIDS(Xk)|/|D|=|{TID : XkÍT,<TID,T> ÎD}| / |D|。Rk的支持數supNum(Rk)=support(Rk)*|D|=|TIDS(Xk)|。L’k表示k-項集的集合。
    改進的Apriori算法依然採用“逐層搜索”的迭代方法,迭代過程的“連接-剪枝”運算定義如下:
    ①連接:設兩個(k-1)-項集:L’ k-1 (i)=< Xk-1,TIDS(Xk-1) >Î L’k-1,L’ k-1 (j)=< Yk-1,TIDS(Yk-1) >Î L’k-1,i<j。如果Xk-1和Yk-1的前k-2項相等,即:Xk-1[k-2] ≡Yk-1[k-2],則(k-1)-項集連接:L’ k-1 (i)∞L’ k-1 (j)= < Xk-1∪Yk-1, TIDS(Xk-1) ∩TIDS(Yk-1)>= <Xk,TIDS(Xk)>=RkÎ L’k;否則,不進行連接運算,因爲產生的結果不是重複,就是非頻繁項目集,這樣可減少計算量。
    ②剪枝:計算k-項集的支持數,根據上面的定義supNum(Rk)=|TIDS(Xk)|,該計算過程不需要再掃描數據庫,避免了I/O操作,提高了算法的效率。如果supNum(Rk)≥minSupNum,則< Xk , |TIDS(Xk)|> Î L;否則,從集合L’k中刪除Rk

3.2  改進的算法描述

    輸入:數據庫D,最小支持數minSupNum
    輸出:D中的頻繁項目集L
    算法描述:
    ① L’1 = findFrequentOneItemSets(D); //掃描數據庫D生成1-項集的集合L’1
    ② for each OneItemSet <X1, TIDS(X1)>ÎL’1  //生成頻繁1-項集的集合
       if (|TIDS(X1)| ≥ minSupNum)
           L = L ∪ {<X1, |TIDS(X1)|>};
       else
           L’1 = L’1 - {<X1, TIDS(X1)>};
    ③ for (k=2; L’k-1≠Ф; k++)
       L’k = L’k-1∞L’k-1;
       For each k_ItemSet <Xk, TIDS(Xk)> ÎL’k
               if (|TIDS(Xk)| ≥ minSupNum)
               L = L ∪ {<Xk, |TIDS(Xk)|>};
           else
               L’k = L’k - {<Xk, TIDS(Xk)>};
    ④ return L;

3.3 例舉

    設數據庫D表1所示,最小支持數minSupNum=4,運行改進的算法的過程如圖所示:

4 總結
    改進的Apriori算法,只是在生成L’1時進行了一次數據庫掃描,在之後的迭代過程中不需要掃描數據庫。與文獻2,3,4,5中提出的改進算法相比,使用本文提出的算法大大降低了I/O負載,使得頻繁項目集的發現速度大大提高,尤其是在項目集長度較大的情況下。算法的迭代過程不需要複雜的計算,項目集連接僅僅使用集合的並、交運算即可完成,使得該算法易於實現,相信該算法具有一定的理論與實用價值。
    但是該算法也有不足:爲了減少I/O負載,要求在第一次掃描時把所有的信息裝入內存,雖然本算法對數據庫進行編碼,以二元組的形式存儲項集,但是數據挖掘都是基於海量數據的,因此,算法運行時需要大量內存,對此將在今後的研究中進行改進。

參考文獻

[1] R. Agrawal, T. Imielinski, and A. Swami. Mining association rules between sets of items in large databases. Proceedings of the ACM SIGMOD Conference on Management of data, pp. 207-216, 1993
[2] A. Savasere, E. Omiecinski, and S. Navathe. An efficient algorithm for mining association rules in large databases. Proceedings of the 21st International Conference on Very large Database, 1995
[3] J. S. Park, M. S. Chen, and P. S. Yu. An effective hash-based algorithm for mining association rules. Proceedings of ACM SIGMOD International Conference on Management of Data, pages 175-186, San Jose, CA, May 1995
[4] H. Mannila, H. Toivonen, and A. Verkamo. Efficient algorithm for discovering association  rules. AAAI Workshop on Knowledge Discovery in Databases, 1994, pp. 181-192
[5] H. Toivonen. Sampling large databases for association rules. Proceedings of the 22nd International Conference on Very Large Database, Bombay, India, September 1996
[6] 羅可, 賀才望. 基於Apriori算法改進的關聯規則提取算法. 計算機與數字工程. 2006, 34(4):48-51,55
[7] 蔡偉傑,楊曉輝等.關聯規則綜述.計算機工程.2001, 27(5):31-33,49
收稿日期:11月3日   修改日期:11月15日
作者簡介: 楊光 男 1976-2 助教(碩士);王瑞 女 1978   助教(碩士)。 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章