數據挖掘導論學習筆記 第六章 關聯分析:基本概念和算法

6.1問題定義

關聯分析(association analysis) 用於發現隱藏在大型數據集中有意義的聯繫,所發現的聯繫可以用關聯規則或者頻繁項集的形式表示

項集和支持度計數

以購物籃數據集爲例

TID 麪包 牛奶 尿布
1 1 1 0
2 1 0 1
5 1 1 1

I={i1,i2,,id}I=\{i_1,i_2,\ldots,i_d\}表示所有項的集合,T={t1,,tN}T=\{t_1,\ldots,t_N\}表示所有事務的集合。在關聯分析中包含0個或多個項的集合被稱爲項集(itemset).如果一個項集包含k個項,則稱他爲k-項集。事物的寬度定義爲事務中出現的項的個數。項集的另一個重要性質是支持度係數,即包含特定項集的事務數,可以表示爲:σ(X)={tiXti,tiT}\sigma(X)=|\{t_i|X \subseteq t_i,t_i\in T\}|其中|·|表示爲集合中元素的個數。

關聯規則(association rule)

關聯規則是形如XYX\to Y的蘊含表達式,其中X和Y是不相交的項集。關聯規則的強度可以用支持度(support)和置信度(confince)度量.支持度可以用於給定數據集的頻繁程度,而置信度確定Y在包含X的事務中出現的頻繁程度。s(XY)=σ(XY)Nc(XY)=σ(XY)σ(X)s(X\to Y)=\frac{\sigma(X\cup Y)}{N}\\ c(X\to Y)=\frac{\sigma(X\cup Y)}{\sigma(X)}支持度低的規則可能是偶然出現的,置信度低的規則Y,在出現X的事務中出現的可能性較低。

關聯規則挖掘任務分解爲兩個子任務

  • 頻繁項集產生:發現滿足最小支持度閾值的所有項集。
  • 規則的產生:從上一步發現的頻繁項集中提取所有的高置信度的規則,這些規則稱爲強規則。也就是說這些規則XY同時出現的概率很高

6.2頻繁項集的產生

通過格結構(lattice structure)來枚舉可能的項集,經過每個候補項集與事務進行比較篩選出頻繁項集。
爲了減少頻繁項集的計算複雜度:

  • 減少候選項集的數目。運用先驗原理
  • 減少比較次數。可以使用更高級的數據結構或者存儲候選項集或者壓縮數據集
    這些方法在後面的章節會有討論

6.2.1先驗原理

如果一個項集是頻繁的,那麼他的所有子集一定也是頻繁的。相反如果一個項集是非頻繁的,那麼他的超集一定也是非頻繁的。
一旦發現一個項集是非頻繁的,整個包含它的超集的子圖可以被立刻剪枝。這種基於支持度度量剪枝的策略稱爲基於支持度的剪枝。這種策略依賴於一個關鍵性質,即一個項集的支持度絕不會超過它的子集的支持度

6.2.2Apriori算法的頻繁項集產生


|k=1k=1
|Fk={iiIσ{i}N×minsup}F_k=\{i|i\in I\land\sigma\{i\}\ge N\times minsup\} (1)(發現所有的頻繁1-|項集)
|repeatrepeat
| k=k+1\quad k=k+1
| Ck=apriorigen(Fk1)\quad C_k=apriori-gen(F_{k-1}) ()(產生候選項集)
| fortTdo\quad for 每個事務t∈T do
| Ci=subject(Ck,t)\qquad C_i=subject(C_k,t) (t)(識別屬於t值的所有候選)
| forcCt\qquad for 每個候選項集c \in C_t do
| σ(c)=σ(c)+1\qquad \sigma(c)=\sigma(c)+1 ()(支持度計數增值)
| end for\qquad end\ for
| end for\quad end\ for
| Fk={ccCkσ(c)N×minsup}(k)\quad F_k=\{c|c\in C_k \land \sigma(c)\ge N \times minsup\}(提取頻繁k-項集)
| until Fk=ϕuntil\ F_k=\phi
| Resulet=FkResulet =\cup F_k


6.2.3候選的產生與剪枝

上述算法中有一個apriori-gen函數,它通過如下兩個步驟產生候選項集

  • 候選項集的產生。有上一次頻繁項集而來
  • 候選項集的剪枝。通過和支持度閾值比較
    下面介紹幾種候選產生過程:
  • 蠻力方法:顧名思義
  • Fk1×F1F_{k-1}\times F_1方法:用1-頻繁項集和k-1-頻繁項集產生k-候選項集
  • Fk1×Fk1F_{k-1}\times F_{k-1}方法:合併一對(k-1)-項集,這兩個項集除了最後一項前面的各項都是相同的,這樣合併以後得到一個k-項集。這個方法可以保證候選項產生過程中的完全性,和使用字典序避免了重複的候選。然而由於每個候選都由一對頻繁(k-1)-項集合合併而成,因此需要附加的候選剪枝步驟,用來確保該候選的其餘k-2個子集是頻繁的.

6.2.3 支持度計數

我們可以讓每一個項集與每一個事務比較並更新支持度計數,但這樣計算量太大,因此我們有另一種方法。
枚舉每個事務所包含的項集,並利用他們更新對應的候選項集的支持度
枚舉只需要按次序逐層進行即可。下面我們討論一種支持度計數的方法

使用Hash進行支持度計數

在apriori算法中,把候選項集劃分爲不同的桶,並存放在Hash樹中。樹的每個內部節點都用哈希函數來確定應當沿着當前節點的那個分支向下。因此,樹的葉節點存放的是候選項集。然後呢,我們再把一個事務按照哈希函數散列下去,這樣事務所包含的k-項集也落入了各個桶中。在各個桶內,把候選項集與事務散列下去的項集進行比較,如果是該事物的子集,就增加它的**支持度計數。**注意這種方法不是將事務中每個項集與所有的候選項集進行比較,而是將它與同一桶內的候選項集進行匹配。
可以粗淺的理解爲,事務子集與候選項集按照統一規則沿不同分支向下,最終得以完全匹配比較。建議讀者對Hash樹的原理進行學習,這裏不做進一步講解

6.2.5計算複雜度

Apriori算法的計算複雜度受到如下因素影響。
支持度閾值:支持度閾值越低,頻繁項集越多
項數(維度):隨着項數的增加,需要更多的空間來存儲項的支持度計數。頻繁項集也更多
事務數:算法掃描數據集次數
事物的平均寬度:頻繁項集的最大長度隨之增大而增大,其次隨着事務寬度的增加,事務中包含更多項集,這將增加支持度計數時Hash樹遍歷次數
下面分析算法的時間複雜度
1-頻繁項集的產生:假定w是事物的平均寬度,則該操作所需要的 時間爲O(Nw),其中N爲事務總數。
候選的產生:爲了產生候選k-項集,需要合併一對頻繁k-1項集,確定他們是否有k-2個項相同。每次合併至多需要k-2次相等比較。合併的總開銷爲k=2w(k2)Ck<<k=2w(k2)Fk12\sum_{k=2}^w(k-2)|C_k|\lt 合併開銷 \lt \sum_{k=2}^{w}(k-2)|F_{k-1}|^2因爲最壞的情況下,第一個項集與前k-2個項集比較後都不匹配,當匹配到第k-1個時匹配,k-1個項集中的每個項集都匹配k-1次
Hash樹在候選產生時構造,以存放候選集。由於Hash樹最大深度爲k,將候選項集散列到Has樹的開銷爲O(k=2wkCk)O(\sum_{k=2}^{w}k|C_k|).由於在Hash樹上查找一個候選的花費是O(k)O(k),在候選項剪枝過程中,需要檢驗每個候選k-項集的k-2個子集是否頻繁。因此,候選剪枝需要的時間是:
O(k=2wk(k2)Ck)O(\sum_{k=2}^wk(k-2)|C_k|)
支持度計數:支持度計數的總開銷爲O(NkCwkαk)O(N\sum_kC_w^k\alpha_k),其中w是事物的最大寬度,αk\alpha_k是更新哈希樹中一個候選k-項集的支持度計數的開銷

6.3 規則產生

本節介紹如何有效地從給定的頻繁項集中提取關聯規則。關聯規則提取的方式之一是:把頻繁項集一分爲二,使得X→Y-X滿足置信度閾值

6.3.1置信度剪枝

定理:如果規則X→Y-X不滿足置信度閾值,那麼X’→Y-X’也不滿足,其中X‘是X的一個子集。

6.3.2Apriori算法中規則的產生

僞代碼

ApripriApripri 算法中規則的產生
for kfk,k2,dofor\ 每一個頻繁k-項集f_k,k\ge2,do
Hi={iifk}{1}\quad H_i=\{i|i\in f_k\}\qquad \{規則的1-項後件\}
call apgenrules(fk,H1)\quad call\ ap-genrules(f_k,H_1)
endforend for


apgenrules(fk,Hm)ap-genrules(f_k,H_m)函數步驟
k=fk{}k=|f_k| \qquad\{頻繁項集的大小\}
m=Hm{}m=|H_m|\qquad \{規則後件的大小\}
if k>m+1 thenif\ k\gt m+1\ then
Hm+1=apriorigen(Hm){}\quad H_{m+1}=apriori-gen(H_m)\qquad\{候選項集產生\}
for hm+1Hm+1do\quad for\ 每個h_{m+1}\in H_{m+1} do
conf=σ(fk)/σ(fkhm+1)\qquad conf=\sigma(f_k)/\sigma(f_k-h_{m+1})
if confminconf then\qquad if\ conf\ge minconf\ then
output:(fkhm+1)hm+1\qquad \quad output:規則(f_k-h_{m+1})\to h_{m+1}
else\qquad else
Hm+1 delete hm+1\qquad \quad 從H_{m+1}\ delete\ h_{m+1}
end if\qquad end\ if
endfor\quad end for
callapgenrules(fk,Hm+1)\quad call ap-genrules(f_k,H_{m+1})
end ifend\ if


6.4 頻繁項集的緊湊表示

6.4.1 極大頻繁項集

定義:極大頻繁項集(maximal frequent itemset)的直接超集都不是頻繁的。
極大頻繁項集形成了所有頻繁項集的最小的項集的集合。它提供了頻繁項集的邊界。如果我們找到一種算法,可以直接發現極大頻繁項集而不需要枚舉它所有的子集,那麼它能極大的減少計算量,事實證明我們可以找到,在後文將會提到。

6.4.2閉頻繁項集

定義:閉項集(closed itemset),它的直接超集都不具有和它相同的支持度計數。換句話說,如果至少存在一個X的直接超集,其支持度計數與X相同,X就不是閉的。
定義:閉頻繁項集指一個項集是閉的而且支持度大於等於最小支持度閾值。
我們可以使用閉頻繁項集來進行”從特殊到一般“的支持度計數。
下面給出僞代碼


C設C是閉頻繁項集的的集合
kmax設k_{max}是閉頻繁項集的最大長度
Fkmax={ffC,f=kmax}%{kmax,}F_{k_{max}}=\{f|f\in C,|f|=k_{max} \}\\\%\{找出長度爲k_{max}的所有頻繁項集,從特殊到一般\}
for k=kmax1 downto 1 dofor\ k=k_{max}-1\ downto\ 1\ do
Fk={ffFk+1,f=k}%{k}\quad F_k=\{f|f\subset F_{k+1},|f|=k\}\\\quad\%\{找出長度爲k的所有頻繁項集\}
fFk do\quad 每個f\in F_k\ do
if fC then\qquad if\ f\notin C\ then
f.support=max{f.supportfFk+1,ff}\qquad \quad f.support=max\{f'.support|f' \in F_{k+1},f\subset f'\}
%{}\qquad \quad\%\{非閉頻繁項集的支持度一定等於它的超集的最大支持度\}
end if\qquad end\ if
endfor\quad end for
endforend for


值得一提的是,如果使用閉頻繁集產生規則,則不會產生冗餘規則。
冗餘規則:對於關聯規則X’→Y’,如果和另一個規則X→Y的支持度和置信度都相同,其中X‘是X的子集,Y’是Y的子集,我們稱關聯規則X→Y是榮譽的。
最後我們總結出一個包含關係。
頻繁項集包括閉頻繁項集包括極大頻繁項集

6.5產生頻繁項集的其他方法

對於稠密數據集,由於事務和數據寬度增加,Apriori算法性能顯著降低。我們下面簡略描述一些替代方法
項集格遍歷:概念上我們可以把頻繁項集的搜索看做遍歷項集格。根據頻繁項集在格中的佈局,我們需要靈活採取不同的搜索策略。

  • 從一般到特殊與從特殊到一般。Apriori算法採用從一般到特殊,可以理解爲從上到下搜索,但如果項集格的頻繁項集邊界在較下方位置,則開銷較大。因此我們可以使用從下到上的策略搜索。此外,我們還可以結合從一般到特殊和從特殊到一般的雙向搜索策略,這種策略對特定的佈局有奇效。
  • 等價類:先將格化分爲兩個不相交的結點組(即等價類).頻繁項集產生算法依次在每個等價類內搜索頻繁項集。
  • 寬度優先與深度優先:Apriori算法即寬度優先。我們主要介紹深度優先,深度優先從第一個節點(比如是a)開始,判斷是否頻繁,如果是向下擴展,直到到達一個非頻繁結點,然後回溯到下一個分支繼續搜索。深度優先搜索算法用於發現極大頻繁項集。這種算法比寬度優先更快,因爲它一旦發現一個極大頻繁項集就可以在他的子集上進行剪枝。
  • 事務數據集的表示。大多數算法包括Apriori算法使用水平數據佈局。而另一種方法是垂直數據佈局,這種佈局可以壓縮數據,節約空間。下面就介紹一種有效方法

6.6 FP增長算法

該算法不同於Apriori算法,它使用一種稱作FP樹的緊湊數據結構組織數據,並從該結構中提取頻繁項集。

6.6.1FP樹表示法

FP樹是一種輸入數據的壓縮表示,他通過逐個讀入事務,並把事務映射到FP樹中的一條路徑來構造。由於不同的事務有相同的項,因此路徑可能重疊,重疊越多,壓縮的效果越好。如果FP樹足夠小,能夠存放到內存中,就可以直接從這個內存中的結構提取頻繁項集,而不必重複的掃描存放在硬盤上的數據。

FP樹
具體的構造方法不在此贅述,請點擊此處進一步學習

6.6.2 FP增長算法的頻繁項集的產生

FP增長是一種自底向上方式探索樹。這種用於發現以某一個特定項結尾的頻繁項集的自底向上策略等價於6.5節介紹的基於後綴的方法。
由於每個事務都映射到FP樹中的一條路徑,因而通過僅考察特定節點(比如e)的路徑,就可以發現以e結尾的頻繁項集。使用與e結點相關聯的指針,可以快速訪問這些路徑。
FP增長採用的分治策略將一個問題分解爲較小的子問題,從而發現以某個特定後綴結尾的所有頻繁項集。
以考察所有以e結尾的頻繁項爲例

  1. 第一步收集包含e結點的所有路徑,這些初始路徑稱爲前綴路徑(prefix path)
  2. 包含e結點的路徑數有三條因此{e}的支持符爲3,假設最小支持度爲2,因此{e}是頻繁項集
  3. 由於{e}是頻繁項集,我們進一步考察de,ce結尾的頻繁項集。首先需要把前綴路徑轉化爲條件FP樹。條件FP樹通過以下步驟得到。
    (a)必須更新前綴路徑的支持度計數,以圖中null-b-c-e路徑爲例,我們要將它的支持度計數更新爲1,以表示包含{b,c,e}的事務的實際個數
    (b)刪除e結點,修剪前綴路徑
    ©更新沿前綴路徑的支持度計數之後,某些項可能不再是頻繁的。比如b點只出現了1次,意味着只有一個事務同時包含be,因此b點可以忽略
  4. 通過e的條件FP樹來發現de,ce,be,ae的條件樹

這解釋了FP增長算法中的分治方法,每一次遞歸都要通過更新前綴路徑中的支持度計數和刪除非頻繁的項來構建條件FP樹。
FP樹增長是一個有趣的算法,他展示瞭如何使用事務數據集的壓縮表示來有效地產生頻繁項集。壓縮的越狠算法越快,它可能比Apriori算法快好幾個數量級。

6.7關聯模式的評估

僅憑藉支持度和置信度可以產生合乎標準的模式數以千計,因此我們需要更有用的評估標準來篩選優質的模式。
第一組標準可以通過統計論據建立。涉及相互獨立的項或覆蓋少量事務的模式被認爲是不令人感興趣的,因爲他們可能反映數據中的僞聯繫。這些模式可以使用客觀興趣度量來排除,比如支持度、置信度和相關性
第二組標準可以通過主觀論據建立。即模式被主觀的認爲是無趣的,除非他能夠結實料想不到的信息。
比如通過 可視化、基於模板的方法、主觀興趣度度量等方法

6.7.1興趣度的客觀度量

客觀度量常常基於相依表中列出的頻度來計算

BB Bˉ\bar{B}
AA f11f_{11} f10f_{10} f1+f_{1+}
Aˉ\bar{A} f01f_{01} f00f_{00} f0+f_{0+}
f+1f_{+1} f+0f_{+0} N

置信度的缺點,就是置信度度量忽略了規則後件中項集的支持度
爲了避免支持度置信度框架的侷限性,我們介紹一些其他的度量;

興趣因子爲解決置信度度量忽略了規則後件中出現的項集的支持度,高置信度規則可能出現誤導的問題。引入一種稱作提升度(lift)的度量:
lift(AB)=c(AB)s(B)lift(A\to B)=\frac{c(A\to B)}{s(B)}它計算規則置信度和規則後件中項集的支持度之間的比率。對於二元變量,提升度等價於另一種稱作
興趣因子
的客觀度量定義如下:I(A,B)=s(A,B)s(A)×s(B)=Nf11f1+f+1I(A,B)=\frac{s(A,B)}{s(A)\times s(B)}=\frac{Nf_{11}}{f_{1+}f_{+1}}興趣因子比較模式的頻率與統計假定下計算的基線頻率。對於兩相互個獨立的變量,基線頻率爲:
f11N=f1+N×f+1N\frac{f_{11}}{N}=\frac{f_{1+}}{N}\times \frac{f_{+1}}{N}該算式從使用簡單比例作爲概率估計的標準方法得到。左邊是聯合概率P(A,B)的估計,右邊分別是P(A),P(B)的估計。興趣因子可做如下解釋:如果I(A,B)I(A,B)等於1則是獨立的,大於1是正相關的,小於1是負相關的。

相關分析:對於二元變量,相關度可以用ϕ\phi係數度量ϕ=f11f00f01f10f1+f+1f0+f+0\phi=\frac{f_{11}f_{00}-f_{01}f_{10}}{\sqrt{f_{1+}f_{+1}f_{0+}f_{+0}}}
相關分析的侷限性在於它把項在事務中同時出現和同時不出現看做同等重要。

IS度量同於處理非對稱二元變量。度量定義如下:
IS(A,B)=I(A,B)×s(A,B)=s(A,B)s(A)s(B)IS(A,B)=\sqrt{I(A,B)\times s(A,B)}=\frac{s(A,B)}{\sqrt{s(A)s(B)}}當模式的興趣因子和模式支持度都很大時IS也很大。
可以證明IS在數學上等價與二元變量的餘弦度量。也可以表示爲從一對二元變量中提取出的關聯規則的置信度的幾何均值:
IS(A,B)=s(A,B)s(A)×s(A,B)s(B)=c(AB)×c(BA)IS(A,B)=\sqrt{ \frac{s(A,B)}{s(A)}\times \frac{s(A,B)}{s(B)}}=\sqrt{c(A\to B)\times c(B\to A)}
IS度量的侷限性:一對相互獨立的A,B及時不相關或負相關的模式,IS值也有可能很大。

1.其他客觀興趣度度量

在這裏插入圖片描述
其中如果度量M是對稱的,那麼M(A→B)=M(B→A)

2.客觀度量的一致性

對同一組實例,不同的度量值可能會有不同的秩

3.客觀度量的性質

反演性:客觀度量M在反演操作下是不變的。反演指反轉位向量。
零加性:客觀度量M在零加操作下是不變的,如果增加f00f_{00}而保持相依表中所有其他頻度不變並不影響M值。
縮放不變性:客觀度量M在行、列縮放操作下是不變的。
不同的度量值具有某種性質,在應用是要注意討論,選擇最適合的度量值。
辛普森悖論:在某些情況下,隱藏的變量可能會導致觀察到的一對變量之間的聯繫出現不一樣的結果(即沒有對條件考慮全面);數據需要適當的分層,考慮到更現實的條件才能得到正確的結論

6.8傾斜支持度分佈的影響

傾斜支持度對關聯分析算法的性能和提取模式的質量有重要影響。
傾斜支持度分佈:但大多數項具有低頻率,少數項具有很高的頻率
規則也是對項的一種相關關係的度量
交叉支持模式:高頻項和低頻項相關聯的虛假模式,其間的相關關係很小,但是支持度閾值的降低使其模式被挖掘;置信度很難區別從是否爲交叉支持模式中提取的規則
支持度模式是一個項集X={i1,i2,…ik}r(X)=min[s(i1),...,s(ik)]max[s(i1),...,s(ik)]r(X)=\frac{min[s(i_1),...,s(i_k)]}{max[s(i_1),...,s(i_k)]}小於值得的閾值hch_c
我們可以通過檢查由給定項集提取的最低置信度規則來檢測交叉支持模式。從頻繁項集得到的最低置信度爲:
s(i1,,ik)max[s(i1),,s(ik)]\frac{s({i_1,\ldots,i_k})}{max[s(i_1),\ldots,s(i_k)]}這個表達式又稱h置信度或全置信度,通過確保模式的h置信度超過hch_c就可以消除交叉支持模式,此外,h置信度能夠去報項集中的項之間是強關聯的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章