關聯規則是數據挖掘中最活躍的研究方法之一, 是指搜索業務系統中的全部細節或事務,找出全部能把一 組事件或數據項與另外一組事件或數據項聯繫起來的規則,以獲 得存在於數據庫中的鮮爲人知的或不能肯定的信息,它側重於確 定數據中不一樣領域之間的聯繫,也是在無指導學習系統中挖掘本地模式的最普通形式。算法
通常來講,關聯規則挖掘是指從一個大型的數據集(Dataset)發現有趣的關 聯(Association)或相關關係(Correlation),即從數據集中識別出頻繁 出現的屬性值集(Sets of Attribute Values),也稱爲頻繁項集 (Frequent Itemsets,頻繁集),而後利用這些頻繁項集建立描述關聯關係的規則的過程。數據庫
發現頻繁項集:現全部的頻繁項集是造成關聯規則的基礎。經過用戶給定的最 小支持度,尋找全部支持度大於或等於Minsupport的頻繁項集。ide
生成關聯規則:經過用戶給定的最小可信度,在每一個最大頻繁項集中,尋找可信度不小於Minconfidence的關聯規則.性能
如何迅速高效地發現全部頻繁項集,是關聯規則挖掘的核心問題,也是衡量關聯規則挖掘算法效率的重要標準。學習
經典的挖掘徹底頻繁項集方法是查找頻繁項集集合的全集。其中包括基於廣度優先算法搜索的 關聯規則算法--Apriori算法(經過屢次迭代找出全部的頻繁項集)及DHP(Direct Hashing Pruning) 算法等改進算法;基於深度優先搜索策略的FP-Growth算法,ECLAT算法,COFI算法等, 我將介紹兩種經典算法--Apriori算法和FP-Growth算法。spa
Apriori算法基於頻繁項集性質的先驗知識,使用由下至上逐層搜索的迭代方法, 即從頻繁1項集開始,採用頻繁k項集搜索頻繁k+1項集,直到不能找到包含更多項的頻繁項集爲止。blog
Apriori算法由如下步驟組成,其中的核心步驟是鏈接步和剪枝步:遞歸
(1)生成頻繁1項集L1。事件
(2)鏈接步:爲了尋找頻繁k項集 ,首先生成一個潛在頻繁k項集構成的候選項集 , 中的每個項集是由兩個只有一項不一樣的屬於 的頻繁項集作k-2鏈接運算獲得的。鏈接方法爲:設l1和l2是 中的項集,即 ,若是l1和l2中的前k-2個元素相同,則稱l1和l2是可鏈接的,用 表示。假定事務數據庫中的項均按照字典順序排列,li[j]表示li中的第j項,則鏈接l1和l2的結果項集是 。事務
(3)剪枝步:鏈接步生成的Ck是Lk的超集,包含全部的頻繁項集Lk,同時也可能包含一些非頻繁項集。能夠利用前述先驗知識(定理3.2),進行剪枝以壓縮數據規模。好比,若是候選k項集Ck的k-1項子集不在Lk-1中,那麼該子集不多是頻繁項集,能夠直接刪除。
(4)生成頻繁k項集Lk:掃描事務數據庫D,計算Ck中每一個項集的支持度,去除不知足最小支持度的項集,獲得頻繁k項集Lk。
(5)重複步驟(2)~(4),直到不能產生新的頻繁項集的集合爲止,算法停止。
(1)Apriori算法是一個多趟搜索算法,每次搜索都要掃描事務數據庫,I/O開銷巨大。對於候選k項集Ck來講,必須掃描其中的每一個元素以確認是否加入頻繁k項集Lk,若候選k項集Ck中包含n項,則至少須要掃描事務數據庫n次。
(2)可能產生龐大的候選項集。因爲針對頻繁項集Lk-1的k-2鏈接運算,由Lk-1 產生的候選k項集Ck是呈指數增加的,如此海量的候選集對於計算機的運算時間和 存儲空間都是巨大的挑戰。
交易 | 商品代碼 |
T100 | L1,L2,L3 |
T200 | L2,L3 |
T300 | L2,L3 |
T400 | L1,L2,L4 |
T500 | L1,L3 |
T600 | L2,L3 |
T700 | L1,L3 |
T800 | L1,L2,L3,L5 |
T900 | L1,L2,L3 |
當K=1,min_sup=1時
計算C1和L1
C1 | |
項集 | 支持度計數 |
{L1} | 6 |
{L2} | 7 |
{L3} | 6 |
{L4} | 2 |
{L5} | 2 |
L1:由C1剪枝獲得L1 | |
項集 | 支持度計數 |
{L1} | 6 |
{L2} | 7 |
{L3} | 6 |
{L4} | 2 |
{L4} | 2 |
計算C2和L2
C2 | |
項集 | 支持度計數 |
{L1,L2} | 4 |
{L1,L3} | 4 |
{L1,L4} | 1 |
{L1,L5} | 2 |
{L2,L3} | 4 |
{L2,L4} | 2 |
{L2,L5} | 2 |
{L3,L4} | 0 |
{L3,L5} | 1 |
{L4,L5} | 0 |
L2:由C2剪枝獲得L2 | |
項集 | 支持度計數 |
{L1,L2} | 4 |
{L1,L3} | 4 |
{L1,L5} | 2 |
{L2,L3} | 4 |
{L2,L4} | 2 |
{L2,L5} | 2 |
計算C3和L3
C3:由L2計算三項集 | |
{L1,L2}+{L1,L3} | {L1,L2,L3} |
{L1,L2}+{L1,L5} | {L1,L2,L5} |
{L1,L2}+{L2,L3} | {L1,L2,L3} |
{L1,L2}+{L2,L4} | {L1,L2,L4} |
{L1,L3}+{L1,L5} | {L1,L3,L5} |
{L1,L3}+{L2,L3} | {L1,L2,L3} |
{L1,L3}+{L2,L4} | 超過三項 |
{L1,L3}+{L2,L5} | 超過三項 |
{L1,L5}+{L2,L3} | 超過三項 |
{L1,L5}+{L2,L4} | 超過三項 |
{L1,L5}+{L2,L5} | {L1,L2,L5} |
{L2,L3}+{L2,L4} | {L2,L3,L4} |
{L2,L3}+{L2,L5} | {L2,L3,L5} |
{L2,L4}+{L2,L5} | {L2,L4,L5} |
L3:由C3剪枝獲得L3 | |
項集 | 支持度計數 |
{L1,L2,L3} | 3 |
{L1,L2,L5} | 2 |
計算C4和L4
C4:由L4計算四項集 | |
{L1,L2,L3}+{L1,L2,L5} | {L1,L2,L3,L5} |
由於它的子集{L2,L3,L5}不是頻繁項集,此項集刪除,C4=0;
優勢:思路簡單;遞歸計算;實現方便
缺點:頻繁遍歷數據庫;生成候選集-----鏈接較多;佔用空間大;運算量大。
頻繁模式樹增加算法(Frequent Pattern Tree Growth)採用分而治之的 基本思想,將數據庫中的頻繁項集壓縮到一棵頻繁模式樹中,同時保持項集 之間的關聯關係。而後將這棵壓縮後的頻繁模式樹分紅一些條件子樹,每一個 條件子樹對應一個頻繁項,從而得到頻繁項集,最後進行關聯規則挖掘。
事務數據庫的創建
Tid | items |
1 | L1,L2,L5 |
2 | L2,L4 |
3 | L2,L3 |
4 | L1,L2,L4 |
5 | L1,L3 |
6 | L2,L3 |
7 | L1,L3 |
8 | L1,L2,L3,L5 |
9 | L1,L2,L3 |
掃描事務數據庫獲得頻繁項目集F
從1到各點 | 各點路徑重複次數 |
1-1 | 6 |
1-2 | 7 |
1-3 | 6 |
1-4 | 2 |
1-5 | 2 |
定義minsup=20%,即最小支持度爲2,從新排列F
從1到各點 | 各點路徑重複次數 |
1-2 | 7 |
1-1 | 6 |
1-3 | 6 |
1-4 | 2 |
1-5 | 2 |
從新調整事務數據庫
Tid | items |
1 | L2,L1,L5 |
2 | L2,L4 |
3 | L2,L3 |
4 | L2,L1,L4 |
5 | L1,L3 |
6 | L2,L3 |
7 | L1,L3 |
8 | L2,L1,L3,L5 |
9 | L2,L1,L3 |
在FP樹中能夠看到,從根節點到i5:1的路徑有兩條:
i2:7-->i1:4-->i5:1
i2:7-->i14-->i3:2-->i5:1
i2:7-->i1:4和i2:7-->i14-->i3:2由於最終到達的節點確定是i5,因此將i5省略就是i5的條件模式基,記爲{i2,i1:1}{i2,i1,i3:1}
條件模式基:{i2,i1:1}{i2,i1,i3:1}
由於i3:1x小於最小支持度2,因此講i3:1省略不計,i5的條件FP樹記爲{i2:2,I1:2}
根據條件FP樹,咱們能夠進行全排列組合,獲得挖掘出來的頻繁模式(這裏要將商品本 身,如i5也算進去,每一個商品挖掘出來的頻繁模式必然包括這商品自己)
項 | 條件模式基 | 條件FP樹 | 產生頻繁模式 |
I5 | {{I2 I1:1},{I2 I1 I3:1}} | {I2:2,I1:2} | {I2 I5:2},{I1 I5:2},{I2,I1:2} |
I4 | {{I2 I1:1},{I2:1}} | {I2:2} | {I2 I4:2} |
I3 | {{I2 I1:2},{I2:2},{I1:2}} | {I2:4,I1:2,I1:2} | {I2 I3:4},{I1 I3:4},{I2 I1 I3:2} |
I1 | {{I1:4}} | {I2:4} | {I2 I1:4} |