1. 程式人生 > >資料探勘之關聯規則挖掘(Apriori演算法)

資料探勘之關聯規則挖掘(Apriori演算法)

一、概述

本篇博文主要闡述資料探勘相關的關聯規則挖掘的演算法(Apriori演算法)。主要介紹關聯規則的基本概念、Apriori演算法原理和Apriori演算法例項,文章末尾處附加Apriori演算法源程式。

二、關聯規則挖掘的基本概念

關聯規則挖掘發現大量資料中項集之間有趣的關聯關係。如果兩項或者多項屬性之間存在關聯,那麼其中一項的屬性可以依靠其他屬性值進行預測。

關聯規則挖掘問題可以分為兩個子問題:1、找出事物資料庫中所有大於等於使用者指定的最小支援度的資料項集;2、利用頻繁項集生成所欲需要的關聯規則,根據使用者設定的最小置信度進行取捨,最後得到強關聯規則。

2.1、項與項集

資料庫中不可分割的最小單位資訊稱為項,用符號i表示。項的集合稱為項集,用 I 表示。項集的個數為k稱為k-項集。比如,集合{啤酒、尿布、奶粉}稱為3-項集。

2.2、事物

事物資料庫T={t1,t2,t3,....,tn}是由一系列具有唯一標識的事務組成的。每個事務ti(i=1,2,3,4,5....,n)包含的項集都是I的子集。

2.3、項集的頻數(支援度計數)

包括項集的事務個數稱之為項集的頻數(支援度計數)

2.4、關聯規則

關聯規則x==>y 的蘊含式。其中x,y都是I的真子集,並且x∩y=∅。x稱之為前提,y稱之為結果。關聯規則反應x中的專案出現時,y中專案也跟著出現的規律。

2.5、關聯規則的支援度(support)

關聯規則的支援度是交易集中同時包含x和y的交易數和所有交易數之比。它反應了x和y中所包含的項在事務集中同時出現的概率,support(x==》y)

support(x==>y) = support(x∪y)=p(xy)

2.6、關聯規則的置信度(confidence)

關聯規則的置信度是交易集包含x和y的交易數與所有交易數和包含x的交易數之比。ji為confidence(x==>y)= support(x∪y)/support(x)=p(y|x)

通常情況下,使用者需要制定最小支援度的閾值和最小置信度的閾值。關聯規則必須要滿足這兩種閾值。如果關聯規則既滿足大於等於最小置信度,並且大於等於最小支援度則成只為強關聯規則,反之不是。通常我們所說的都是強關聯規則。

項集U在T中所佔的支援度的百分比就是他的支援度。support(U)=||{t∈T|U∈t}/||T||.對於專案集I,在事務資料庫T中所滿足使用者指定的最小支援度的專案集,稱之為頻繁專案集。

專案集空間理論-----頻繁項集的子集仍然是頻繁項集,非頻繁項集的超集是非頻繁專案集。

3、關聯規則挖掘演算法------Apriori演算法原理

3.1、Apriori演算法的基本思想

Apriori演算法的基本思想是通過對資料庫的多次掃描來計算項集的支援度,發現所有的頻繁項集從而生成關聯規則。Apriori演算法對資料集進行多次掃描。第一次掃描得到頻繁1-項集的集合L1,第K(k>1)次掃描首先利用第(k-1)次掃描的結果Lk-1來產生候選集k-項集的集合Ck,然後在掃描的過程中確定Ck的支援度。最後,在每次掃描結束時計算頻繁k-項集的集合Lk,演算法在候選集k-項集的集合Ck為空時結束。

3.2、Apriori演算法產生頻繁項集的過程

產生頻繁項集的過程只要分為連線和減枝兩步:

1、連線:為找到Lk(k>1),通過Lk-1與自身做連線產生候選k-項集的集合Ck。設l1,l2是Lk-1中的項集。記li[j]表示li的第j個項。Apriori演算法假定事務或項集中的項按字典次序排序;如果Lk-1的元素l1,l2的前k-2項相等,l1的k-1項小於l2的k-1項,則可以認為l1和l2可以做連線。連線結果(l1[1],l1[2],l1[3],l1[4],.......,l1[k-1],l2[k-1])

2、減枝:由Apriori的性質可知,頻繁項集k-項集的任何子集都是必須是頻繁項集,由連線生成的集合Ck需要進行驗證,去除不滿足支援度的非頻繁k-項集。

3.3、Apriori演算法的主要步驟

  1. 掃描全部資料,產生候選1-項集的集合C1.
  2. 根據最小支援度,由候選1-項集的集合C1產生頻繁1-項集的集合L1.
  3. 對k>1,重複執行步驟4,5,6
  4. 由Lk執行連線和減枝操作,產生候選k+1-項集的集合Ck+1
  5. 根據最小支援度,由候選(k+1)-項集的集合Ck+1,產生頻繁(k+1)-項集的集合Lk+1
  6. 若L不等於∅,則k=k+1,步驟跳4,否則結束
  7. 根據最小置信度,由頻繁項集產生強關聯規則,結束

3.4、Apriori演算法描述

輸入:資料庫D,最小支援度閾值min_sup。

輸出:D中的頻繁集L.

Begin

L1=1-頻繁項集

for(k=2;Lk-1≠∅;k++)do begin

Ck=Apriori_gen(Lk-1);{呼叫函式Apriori——gen(Lk-1)通過頻繁(k-1)-項集產生候選k-項集}

for所有資料集t∈D do begin {掃描D用於計數}

Ct=subset(ck,t);{用sbuset找出該事務中候選的所有子集}

for所有候選集c屬於Ct,do

c.count++

end;

Lk={c∈Ck|c.count>=min_sup}

end

end

return L1∪L2∪......∪Lm{形成頻繁項集的集合}

3、Apriori演算法例項