【機器學習】資料探勘演算法——關聯規則(二),挖掘過程,Aprioir演算法
關聯規則挖掘的原理和過程
從關聯規則(一)的分析中可知,關聯規則挖掘是從事務集合中挖掘出這樣的關聯規則:它的支援度和置信度大於最低閾值(minsup,minconf),這個閾值是由使用者指定的。根據
要想找出滿足條件的關聯規則,首先必須找出這樣的集合 ,它滿足,其中是中包含的事務的個數,然後再從中找出這樣的蘊含式,它滿足,並且。我們稱像這樣的集合稱為頻繁專案集,假如中的元素個數為,我們稱這樣的頻繁專案集為,它是專案集合的子集。所以關聯規則挖掘可以大致分為兩步:
- 從事務集合中找出頻繁專案集;
- 從頻繁專案集合中生成滿足最低置信度的關聯規則。
通俗的理解: 頻繁項集所依賴的支援度其實就是覆蓋率。 關聯規則所依賴的可信度其實就是條件概率。
用於求解關聯規則頻繁項集的演算法較為常用的有三種:
- Apriori
- FP-Growth
- Eclat
本章節主要介紹Apriori演算法。
Apriori演算法
最出名的關聯規則挖掘演算法是Apriori演算法,它主要利用了向下封閉屬性:如果一個項集是頻繁專案集,那麼它的非空子集必定是頻繁專案集。它先生成1-頻繁專案集,再利用1-頻繁專案集生成2-頻繁專案集。。。然後根據2-頻繁專案集生成3-頻繁專案集…依次類推,直至生成所有的頻繁專案集,然後從頻繁專案集中找出符合條件的關聯規則。
下面來討論一下頻繁專案集的生成過程,它的原理是根據生成。因此首先要做的是找出,這個很容易得到,只要迴圈掃描一次事務集合統計出專案集合中每個元素的支援度,然後根據設定的支援度閾值進行篩選,即可得到。下面證明一下為何可以通過生成頻繁專案集:
假設某個專案集是頻繁專案集,那麼它的非空子集, 必定都是頻繁專案集,通過觀察,任何一個含有n個元素的集合,它的非空子集定會包含兩項和,對比這兩個子集可以發現,它們的前項是相同的,它們的並集就是集合。對於2-頻繁專案集,它的所有1非空子集也必定是頻繁專案集,那麼根據上面的性質,對於2-頻繁專案集中的任一個,在1-頻繁專案集中必定存在2個集合(不需要一定是最後一個元素不同)的並集與它相同。因此在所有的1-頻繁專案集中找出只有一項不同的集合,將其合併,即可得到所有的包含2個元素的專案集,得到的這些包含2個元素的專案集不一定都是頻繁專案集,所以需要進行剪枝。剪枝的辦法是看它的所有1非空子集是否在1-頻繁專案集中,如果存在1非空子集不在1-頻繁專案集中,則將該2專案集剔除。經過該步驟之後,剩下的則全是頻繁專案集,即2-頻繁專案集。依次類推,可以生成3-頻繁專案集…直至生成所有的頻繁專案集。
生成頻繁項集
生成一個頻繁集的步驟分聯合和剪枝兩步。
- 聯合(join),虛擬碼如下:
其中為頻繁集。合併只有一個元素不同的,如(1,2,3)、(1,3,7)和(1,4,9),就會是(1,2,3)和(1,3,7)合併成(1,2,3,7),而不會其他的合併,因為其他情況,兩元素有不只一個元素不同(為確保合併後的項集元素只增加了一個)。
- 剪枝(pruning) 合併後的集合,如果有子集不在原集合中,則把該合併集合刪除。例如:有2-頻繁專案集 因為除了最後一個元素以外都相同,所以求的並集得到,和的並集得到的並集得到。但是由於的子集不在2-頻繁專案集中,所以需要把剔除掉。
生成強規則
得到頻繁專案集之後,則需要從頻繁專案集中找出符合條件的強關聯規則。最簡單的辦法是:遍歷所有的頻繁專案集,然後從每個專案集中依次取個元素作為後件,該專案集中的其他元素作為前件,計算該規則的置信度進行篩選即可。這樣的窮舉效率顯然很低。假如對於一個頻繁專案集,可以生成下面這樣的關聯規則:
那麼這條規則的置信度 根據這個置信度計算公式可知,對於一個頻繁專案集是不變的,而假設該規則是強關聯規則,則也是強關聯規則,其中是的子集,因為肯定小於。即給定一個頻繁專案集,如果一條強關聯規則的後件為,那麼以的非空子集為後件的關聯規則都是強關聯規則。所以可以先生成所有的1-後件(後件只有一項)強關聯規則,然後再生成2-後件強關聯規則,依次類推(與生成頻繁項集類似),直至生成所有的強關聯規則。
一個例子
下面舉例說明Apiori演算法的具體流程: 假如有專案集合,有事務集:
t1:1,2,3
t2:1,2,4
t3:1,3,4
t4:1,2,3,5
t5:1,3,5
t6:2,4,5
t7:1,2,3,4
設定minsup=3/7,minconf=5/7。
首先:生成頻繁專案集:
1-頻繁專案集:
生成2-頻繁專案集: 根據1-頻繁專案集生成所有的包含2個元素的專案集:任意取兩個只有最後一個元素不同的1-頻繁專案集,求其並集,由於每個1-頻繁專案集元素只有一個,所以生成的專案集如下: