關聯規則挖掘理論和算法


  諸多的研究人員對關聯規則的挖掘問題進行了大量的研究。他們的工作涉及關聯規則的挖掘理論的探索、原有算法的改進和新算法的設計、並行關聯規則挖掘(Quantitive Association Rule Mining)等問題。

內容提要

  • 基本概念與解決方法
  • 經典的頻繁項目集生成算法分析
  • Apriori算法的性能瓶頸問題
  • Apriori的改進算法

啤酒與尿布的故事說起

  在一家超市里,有一個有趣的現象:尿布和啤酒赫然擺在一起出售。但是這個奇怪的舉措卻使尿布和啤酒的銷量雙雙增加了。這不是一個笑話,而是發生在美國沃爾瑪連鎖店超市的真實案例,並一直為商家所津津樂道。沃爾瑪擁有世界上最大的數據倉庫系統,為了能夠准確了解顧客在其門店的購買習慣,沃爾瑪對其顧客的購物行為進行購物籃分析,想知道顧客經常一起購買的商品有哪些。沃爾瑪數據倉庫里集中了其各門店的詳細原始交易數據。在這些原始交易數據的基礎上,沃爾瑪利用數據挖掘方法對這些數據進行分析和挖掘。一個意外的發現是:"跟尿布一起購買最多的商品竟是啤酒!經過大量實際調查和分析,揭示了一個隱藏在"尿布與啤酒"背后的美國人的一種行為模式:在美國,一些年輕的父親下班后經常要到超市去買嬰兒尿布,而他們中有30%~40%的人同時也為自己買一些啤酒。產生這一現象的原因是:美國的太太們常叮囑她們的丈夫下班后為小孩買尿布,而丈夫們在買尿布后又隨手帶回了他們喜歡的啤酒。

 概述

  關聯規則(Association Rule Mining)挖掘是數據挖掘中最活躍的研究方法之一 最早是由R.Agrawal等人提出的 其目的是為了發現超市交易數據庫中不同商品之間的關聯關系。 一個典型的關聯規則的例子是:70%購買了牛奶的顧客將傾向於同時購買面包。 經典的關聯規則挖掘算法:Apriori算法和FP-growth算法

引例

  假定某超市銷售的商品包括:bread、bear、cake、cream、milk和tea

  

   定義3.1 項目與項集:設I={i1,i2,…,im}是m個不同項目的集合,每個ik(k=1,2,……,m)稱為一個項目(Item)。項目的集合I稱為項目集合(Itemset),簡稱為項集。其元素個數稱為項集的長度,長度為k的項集稱為k-項集(k-Itemset)。

  定義3.2 交易:每筆交易T(Transaction)是項集I上的一個子集,即 \( T\subseteq I \),但通常 \( T \subset  I \)。對應每一個交易有一個唯一的標識——交易號,記作TID。交易的全體構成了交易數據庫D,或稱交易記錄集D,簡稱交易集D。交易集D中包含交易的個數記為|D|。 

  定義3.3 項集的支持度:對於項集X,\( X \subset  I \),設定count( \( X\subseteq T \) )為交易集D中包含X的交易的數量。項集X的支持度support(X)就是項集X出現的概率,從而描述了X的重要性。 

\begin{equation}
support(X)=\frac{count(X \subseteq T)}{ |D| }
\end{equation}

  定義3.4 項集的最小支持度與頻繁集:發現關聯規則要求項集必須滿足的最小支持閾值,稱為項集的最小支持度(Minimum Support),記為supmin。從統計意義上講,它表示用戶關心的關聯規則必須滿足的最低重要性。只有滿足最小支持度的項集才能產生關聯規則。支持度大於或等於supmin的項集稱為頻繁項集,簡稱頻繁集,反之則稱為非頻繁集。通常k-項集如果滿足supmin,稱為k-頻繁集,記作Lk。

  定義3.5 關聯規則:關聯規則(Association Rule)可以表示為一個蘊含式:\( R:X\Rightarrow Y \)

  定義3.6 關聯規則的支持度:對於關聯規則 \( R:X\Rightarrow Y \),其中\( X\subset I \),\( Y\subset I \),並且\(X\cap Y=\Phi \),規則R的的支持度(Support)是交易集中同時包含X和Y的:易數與所有交易數之比。 

\begin{equation}
support(X \Rightarrow Y)=\frac{count(X \cup Y)}{|D|}
\end{equation}

  定義3.7 關聯規則的可信度:對於關聯規則 \( R:X\Rightarrow Y \),其中\( X\subset I \),\( Y\subset I \),並且\(X\cap Y=\Phi \),規則R的可信度(Confidence)是指包含X和Y的交易數與包含X的交易數之比 

\begin{equation}
support(X \Rightarrow Y)=\frac{count(X \cup Y)}{support(X)}
\end{equation}

  定義3.8 關聯規則的最小支持度和最小可信度:關聯規則的最小支持度也就是衡量頻繁集的最小支持度(Minimum Support),記為supmin,它用於衡量規則需要滿足的最低重要性。規則的最小可信度(Minimum Confidence)記為confmin,它表示關聯規則需要滿足的最低可靠性。

  簡單例子如下:
  

   顧客購買記錄的數據庫D,包含6個事務。項集I={網球拍,網球,運動鞋,羽毛球}。考慮關聯規則(頻繁二項集):網球拍與網球,事務1,2,3,4,6包含網球拍,事務1,2,6同時包含網球拍和網球,支持度(X^Y)/D=0.5,置信度(X^Y)/X=0.6。若給定最小支持度α = 0.5,最小置信度β = 0.6,認為購買網球拍和購買網球之間存在關聯。 

  定義3.9 強關聯規則:如果規則 \( X\Rightarrow Y \)滿足:\( support(X\Rightarrow Y) \ge supmin \) 且\( confidence(X \Rightarrow Y) \ge confmin \),稱關聯規則 \( X \Rightarrow Y \)為強關聯規則,否則稱關聯規則 \( X\Rightarrow Y \)為弱關聯規則。在挖掘關聯規則時,產生的關聯規則要經過supmin和confmin的衡量,篩選出來的強關聯規則才能用於指導商家的決策。

  關聯規則挖掘問題可以划分成兩個子問題: 1. 發現頻繁項目集:通過用戶給定Minsupport ,尋找所有頻繁項目集或者最大頻繁項目集。 2.生成關聯規則:通過用戶給定Minconfidence ,在頻繁項目集中,尋找關聯規則。 第1個子問題是近年來關聯規則挖掘算法研究的重點。

  經典的頻繁項目集生成算法分析:項目集空間理論、經典的發現頻繁項目集算法、關聯規則生成算法。Agrawal等人建立了用於事務數據庫挖掘的項目集格空間理論(1993, Appriori 屬性)。

  定理3-1( Appriori 屬性1):如果項目集X 是頻繁項目集,那么它的所有非空子集都是頻繁項目集。 證明 設X是一個項目集,事務數據庫T 中支持X 的元組數為s。對X的任一非空子集為Y,設T中支持Y的元組數為 \( s_1 \) 。 根據項目集支持數的定義,很容易知道支持X 的元組一定支持Y,所以 \( s_1 \ge s \) ,即 \( support(Y) \ge support(X) \)。 按假設:項目集X 是頻繁項目集,即\( support(Y) \ge minsupport \), 所以 \( support(Y) \ge support(X) \ge minsupport \),因此Y是頻繁項目集。□

  定理3-2( Appriori 屬性2):如果項目集X 是非頻繁項目集,那么它的所有超集都是非頻繁項目集。 證明 (略)

  算法3-1 Apriori(發現頻繁項目集)1994年,Agrawal 等人提出了著名的Apriori 算法。

  

   算法apriori中調用了apriori-gen( \( L_{k-1} \)),是為了通過(k-1)-頻集產生K-侯選集。

  

   has_infrequent_subset(c, \( L_{k-1} \) ),判斷c是否加入到k-侯選集中。發現算法解決的是關聯規則挖掘的第一個問題。關聯規則分為布爾關聯規則和多值規則。多值關聯規則都轉化為布爾關聯規則來解決,因此先介紹布爾關聯規則算法 Apriori,AprioriTid。分為第一次遍歷和第k次遍歷。第一次遍歷計算每個項目的具體值,確定大項目集1項目集 \( L_1 \)。第k次遍歷利用前一次找到的大項集 \( L_{k-1} \) 和Apriori-gen函數產生候選集 \( C_k \) ,然后掃描數據庫,得到 \( C_k \)  中候選的支持度,剔除了不合格的候選后 \( C_k \) 作為\( L_k \) 。下表給出一個樣本事務數據庫,並對它實施Apriori算法。

  

   

  根據上面介紹的關聯規則挖掘的兩個步驟,在得到了所有頻繁項目集后,可以按照下面的步驟生成關聯規則: 對於每一個頻繁項目集l,生成其所有的非空子集; 對於l 的每一個非空子集x,計算Conference(x),如果 \( Confidence(x) \ge minconfidence \) ,那么“ \( x \Rightarrow (1-x) \) ”成立。

  算法3-4 從給定的頻繁項目集中生成強關聯規則,核心是genrules遞歸過程,它實現一個頻繁項目集中所有強關聯規則的生成。

  

   算法3-5  遞歸測試一個頻集中的關聯規則

   

   Minconfidence=80%

  

  Apriori作為經典的頻繁項目集生成算法,在數據挖掘中具有里程碑的作用。

   Apriori算法有兩個致命的性能瓶頸: 1.多次掃描事務數據庫,需要很大的I/O負載 對每次k循環,侯選集 \( C_k \) 中的每個元素都必須通過掃描數據庫一次來驗證其是否加入\( L_k \) 。假如有一個頻繁大項目集包含10個項的話,那么就至少需要掃描事務數據庫10遍。 2.可能產生龐大的侯選集 由\( L_k -1 \) 產生k-侯選集 \( C_k \) 是指數增長的,例如 \( 10^4 \) 個1-頻繁項目集就有可能產生接近 \( 10^7 \) 個元素的2-侯選集。如此大的侯選集對時間和主存空間都是一種挑戰。

   Apriori的改進算法:基於數據分割的方法、基於散列的方法。一些算法雖然仍然遵循Apriori 屬性,但是由於引入了相關技術,在一定程度上改善了Apriori算法適應性和效率。 主要的改進方法有: 基於數據分割(Partition)的方法:基本原理是“在一個划分中的支持度小於最小支持度的k-項集不可能是全局頻繁的”。 基於散列(Hash)的方法:基本原理是“在一個hash桶內支持度小於最小支持度的k-項集不可能是全局頻繁的”。 基於采樣(Sampling)的方法:基本原理是“通過采樣技術,評估被采樣的子集中,並依次來估計k-項集的全局頻度”。 其他:如,動態刪除沒有用的事務:“不包含任何Lk的事務對未來的掃描結果不會產生影響,因而可以刪除”。

  定理3-5:設數據集D被分割成分塊 \( D_1,D_2, \cdots , D_n \) ,全局最小支持數為minsup_count。如果一個數據分塊 \( D_i \) 的局部最小支持數minsup_coun \( t_i (i=1,2, \cdots, n) \),按着如下方法生成: minsup_coun \( t_i \) = minsup_count *|| \( D_i \) || / ||D|| 則所有的局部頻繁項目集涵蓋全局頻繁項目集。 作用:

  1.合理利用主存空間:數據分割將大數據集分成小的塊,為塊內數據一次性導入主存提供機會。

  2.支持並行挖掘算法:每個分塊的局部頻繁項目集是獨立生成的,因此提供了開發並行數據挖掘算法的良好機制。

  1995,Park等發現尋找頻繁項目集的主要計算是在生成2-頻繁項目集上。因此,Park等利用了這個性質引入雜湊技術來改進產生2-頻繁項目集的方法。例子:桶地址 =(10x+y)mod 7;minsupport_count=3

  

  對項目集格空間理論的發展 Close算法 FP-tree算法。隨着數據庫容量的增大,重復訪問數據庫(外存)將導致性能低下。因此,探索新的理論和算法來減少數據庫的掃描次數和侯選集空間占用,已經成為近年來關聯規則挖掘研究的熱點之一。 兩個典型的方法: Close算法 FP-tree算法。一個頻繁閉合項目集的所有閉合子集一定是頻繁的;一個非頻繁閉合項目集的所有閉合超集一定是非頻繁的。 什么是一個閉合的項目集? 一個項目集C是閉合的,當且僅當對於在C中的任何元素,不可能在C中存在小於或等於它的支持度的子集。 例如,C1={AB3,ABC2}是閉合的; C2={AB2,ABC2}不是閉合的;下面是Close算法作用到表4-1數據集的執行過程(假如minsup_count=3):

  

   掃描數據庫得到 \( L_1 \) ={(A,3), (B,5), (C,4), (D,3), (E,3)};相應關閉項目集為 \( C_1 \) (A)={ABC,3}, \( C_1 \) (B)={B,5}, \( C_1 \) (C)={BC,4}, \( C_1 \) (D)={BD,3}, \( C_1 \) (E)={BE,3} ;  \( L_2 \) ={(AB,3), (AC,3), (BC,4), (BD,3), (BE,3)};相應關閉集為  \( C_2 \)  (AB)={ABC,3};  \( L_3 \) , \( L_4 \) , \( L_5 \)  不用測,於是頻繁大項集為{ABC }。

  FP-tree算法的基本原理:進行2次數據庫掃描,一次對所有1-項目的頻度排序;一次將數據庫信息轉變成緊縮內存結構。 不使用侯選集,直接壓縮數據庫成一個頻繁模式樹,通過頻繁模式樹可以直接得到頻集。 基本步驟是: 兩次掃描數據庫,生成頻繁模式樹FP-Tree: 掃描數據庫一次,得到所有1-項目的頻度排序表T; 依照T,再掃描數據庫,得到FP-Tree。 使用FP-Tree,生成頻集: 為FP-tree中的每個節點生成條件模式庫; 用條件模式庫構造對應的條件FP-tree; 遞歸挖掘條件FP-trees同時增長其包含的頻繁集: 如果條件FP-tree只包含一個路徑,則直接生成所包含的頻繁集。

   

  為每個節點, 尋找它的所有前綴路徑並記錄其頻度,形成CPB

  

   為每一個節點,通過FP-tree構造一個C-FP-tree。例如,m節點的C-FP-tree為:

  

   

實驗內容

  1.用你自己熟悉的語言,編寫程序(Apriori算法,Close算法,FP-tree 算法中的一種)對所給定的數據集進行關聯規則挖掘,給出具體程序和挖掘結果,結果要求包含頻繁項集與強關聯規則。

  2.最小支持度與最小可信度自行設定(要求給出調整過程),從而得出合理的最小支持度與最小可信度。

 

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM